如何在mvc中清除实体集合

时间:2012-06-07 16:51:41

标签: c# asp.net-mvc asp.net-mvc-3 entity-framework

将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();
         }
    }

出于某种原因,这不起作用。而且我不确定为什么?感谢

1 个答案:

答案 0 :(得分:0)

您应该从数据库加载供应商及其联系人,然后更新其属性和SaveChanges:

var vendor = ...retrieve vendor from db...;
vendor.Contacts.Load();
vendor.Contacts.Clear();
...update vendor properties...
db.SaveChanges();

我知道它不如附加实体和保存状态那么有效,但没有人说EF是完美的。

顺便说一句,直接绑定到Entity Framework对象可能非常危险。恶意用户可以使用您为其提供的表单中不存在的值准备POST,并更改字段的值,您不希望在此操作中修改。您应该创建特殊的视图模型。