将MVC3.0与剃刀视图引擎一起使用。我有一个名为“Vendors”的实体,其中包含多个引用另一个名为“Contacts”的实体。我想要做的就是删除特定控制器中供应商的所有引用。这是我的代码:
public ActionResult _Edit(Vendor vendor)
{
if (ModelState.IsValid)
{
//Clear contact list
vendor.Contacts.Clear();
db.Vendors.Attach(vendor);
db.ObjectStateManager.ChangeObjectState(vendor, EntityState.Modified);
db.SaveChanges();
}
}
出于某种原因,这不起作用。而且我不确定为什么?感谢
答案 0 :(得分:0)
您应该从数据库加载供应商及其联系人,然后更新其属性和SaveChanges:
var vendor = ...retrieve vendor from db...;
vendor.Contacts.Load();
vendor.Contacts.Clear();
...update vendor properties...
db.SaveChanges();
我知道它不如附加实体和保存状态那么有效,但没有人说EF是完美的。
顺便说一句,直接绑定到Entity Framework对象可能非常危险。恶意用户可以使用您为其提供的表单中不存在的值准备POST,并更改字段的值,您不希望在此操作中修改。您应该创建特殊的视图模型。