0

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

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

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

4

1 回答 1

0

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

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

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

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

于 2012-06-07T17:16:11.240 回答