2011-12-23 15 views
3

私は2つのエンティティ、InvoiceとInvoiceDetailを持っています。エンティティフレームワーク:更新関連エンティティ

請求書にはInvoiceDetailsメンバーがあります。

オブジェクトを作成すると、期待どおりに動作します。

フレームワークは、InvoiceおよびInvoiceDetail行をデータベースに挿入します。

$.ajax({ 
    url: "/Invoices/Index", 
    data: JSON.stringify({ 
     InvoiceDetails: [{ 
      Description: "1" 
     }, { 
      Description: "2" 
     }] 
    }), 
    contentType: "application/json", 
    type: "POST" 
}); 

    [ActionName("Index")] 
    [HttpPost] 
    public JsonResult Post(Invoice invoice) 
    { 
     db.Invoices.AddObject(invoice); 
     db.SaveChanges(); 
     ... 

また、請求書と関連する請求書詳細を更新したいと思います。

$.ajax({ 
    url: "/Invoices/Index/1", 
    data: JSON.stringify({ 
     Id: 1, 
     InvoiceDetails: [{ 
      Id: 1, 
      Description: "1*" 
     }, { 
      Id: 2, 
      Description: "2*" 
     }] 
    }), 
    contentType: "application/json", 
    type: "PUT" 
}); 

    [ActionName("Index")] 
    [HttpPut] 
    public JsonResult Put(Invoice invoice) 
    { 
     db.Invoices.Attach(invoice); 
     db.ObjectStateManager.ChangeObjectState(invoice, EntityState.Modified); 
     db.SaveChanges(); 
     ... 

ただし、フレームワークは請求書のみを更新します。

関連エンティティもどのように更新できますか?

私のモデルは、この

enter image description here

EDIT次のようになります。解決策 http://michele.berto.li/update-of-an-object-and-related-records-with-backbonejs-and-net-mvc

私は通常、非常にアタッチで働いていませんでした更新されたリンク http://michele.berto.li/update-of-an-object-and-related-records-with-backbone-js-and-net-mvc/

答えて

1

ChangeObjectStateを呼び出すと、単一エンティティの状態が変更されますが、リレーションは変更されていません。したがって、既存の請求書の詳細だけを変更する場合は、それらの詳細を繰り返し、変更された状態に設定するだけです。詳細を追加または削除することができる場合は、much more complicatedとなりますので、要求と状態をデータベースに手動で同期させる必要があります(@Hammersteinが提案したように、請求書をデータベースから最初にロードする)か、データベースでチェックすることなく、削除または追加された状態に設定することができます。

+0

私はコントローラの 'HttpPost'アクションを持っています。これはエンティティとそのナビゲーションプロパティからなる複雑なフォームの送信を処理します。削除のためにいくつかのアイテムが欠落しているコレクション、新しいアイテム、変更されたアイテム単一のオブジェクトのナビゲーションでも同じです。 (FKプロパティはヌル可能です)、新しいエンティティに変更されたり、既存のまたは他の多くのオプションを変更したりすることができます。関連するエンティティをEFで管理する方法に関する統一された方法はありますか?そのような操作を実行するための明確で統一された方法の欠如に伴い、すべてが厄介になり始めています。 – Shimmy

+0

この件に関する2015年のニュースはありますか?関連するエンティティの削除を含むグラフ全体を簡単に更新する方法はありますか? – Shimmy

0

私はデータベースに照会し、更新するレコードとアベニューが変わります。しかし、私は、添付している請求書に請求書の詳細と同じ関連付けがないと思います。そのレコードを取り出して更新し、変更を保存する必要があります。

関連する問題