C# 如何在mvc中清除实体集合

C# 如何在mvc中清除实体集合,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,将MVC3.0与razor视图引擎一起使用。我有一个名为“供应商”的实体,其中包含对另一个名为“联系人”的实体的多对多引用。我要做的就是删除特定控制器中供应商的所有引用。这是我的密码: public ActionResult _Edit(Vendor vendor) { if (ModelState.IsValid) { //Clear contact list vendor.Contacts.Clear()

将MVC3.0与razor视图引擎一起使用。我有一个名为“供应商”的实体,其中包含对另一个名为“联系人”的实体的多对多引用。我要做的就是删除特定控制器中供应商的所有引用。这是我的密码:

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

出于某种原因,这不起作用。我不知道为什么?谢谢

您应该从数据库中加载供应商及其联系人,然后更新其属性并保存更改:

var vendor = ...retrieve vendor from db...;
vendor.Contacts.Load();
vendor.Contacts.Clear();
...update vendor properties...
db.SaveChanges();
我知道它不如附加实体和保存状态那样有效,但没有人说EF是完美的


顺便说一下,直接绑定到实体框架对象可能非常危险。恶意用户可以使用您提供给他的表单中不存在的值准备帖子,并更改字段的值,您甚至不希望在此操作中修改这些值。您应该创建特殊视图模型。

您的意思是删除所有供应商对Contacts的引用删除所有集合供应商。对于特定供应商,请删除Contacts