我以为我把这一切都弄清楚了,但我正在打砖墙。实体如何轻松更新? (EF代码优先,MVC3)
客户端发送一个对象,我的控制器检查用户是否有权编辑,然后继续更新数据库中的实体。 (以及该对象具有的任何导航属性)。
我的问题是,我似乎无法得到它的工作...
我试图
var obj = context.Recipes.SingleOrDefault(o=>o.ID == id);
UpdateModel(obj);
但我得到了一个“模型无法更新”异常。
所以我尝试了不同的方法,把配方R插入参数列表(并让模型绑定做的工作),并调用
context.Recipes.Attach(r);
,但留下的“不变”的东西,所以context.SaveChanges()
什么都不做。
是否有一个简单的解决方案,而不必为我的对象上的EVERY属性编写obj.SomeProperty = r.SomeProperty
?
奖金的问题:如果我的实体具有导航性能(集合)我明明添加在(与ID == 0
)所发出的新的,但我怎么知道删除哪一个?我可以在这里利用EF的变更跟踪吗?
对于这两个问题:应该有一个神奇的“比较此对象与此对象,然后保存”的方法?
这两个代码片段是如何相关的?你的问题看起来有点不一致。如果仅使用第一个片段并调用“SaveChanges”,会发生什么? – 2012-01-15 11:35:55
例外。 “模型不能更新”。 – TDaver 2012-01-15 11:46:00
是否有任何异常的细节?如果您使用急切加载来加载所有必须更新的关系,会发生什么情况? – 2012-01-15 12:19:59