0

Razor ビュー エンジンで 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が完璧だとは誰も言いませんでした。

ところで、Entity Framework オブジェクトへの直接バインディングは非常に危険な場合があります。悪意のあるユーザーは、提供されたフォームには存在しない値で POST を準備し、このアクションで変更されたくないフィールドの値を変更する可能性があります。特別なビュー モデルを作成する必要があります。

于 2012-06-07T17:16:11.240 に答える