【发布时间】:2012-01-15 11:26:20
【问题描述】:
我以为我已经把这一切都弄清楚了,但我碰上了砖墙。
客户端发送一个对象,我的控制器检查用户是否有权编辑,然后继续更新数据库中的实体。 (以及对象具有的任何导航属性)。
我的问题是,我似乎无法让它工作......
我试过了
var obj = context.Recipes.SingleOrDefault(o=>o.ID == id);
UpdateModel(obj);
但我收到“模型无法更新”异常。
所以我尝试了一种不同的方法,将 Recipe r 放入参数列表(并让模型绑定器完成工作)并调用
context.Recipes.Attach(r);
但这会使事情保持“不变”,所以context.SaveChanges()什么都不做。
有没有一个简单的解决方案,我不必为我的对象上的每个属性写 obj.SomeProperty = r.SomeProperty?
额外问题:如果我的实体有导航属性(集合),我显然会添加新发送的属性(使用ID == 0),但我怎么知道要删除哪个?我可以在此处使用 EF 的变更跟踪吗?
对于这两个问题:是否应该有一个神奇的“将此对象与此对象进行比较,然后保存”的方法?
【问题讨论】:
-
这两个代码 sn-ps 有什么关系。你的问题看起来有点不一致。如果您只使用第一个 sn-p 并调用
SaveChanges会发生什么? -
异常。 “无法更新模型”。
-
有异常的细节吗?如果您使用预先加载来加载所有必须更新的关系会发生什么?
标签: asp.net-mvc-3 entity-framework ef-code-first crud