2011-10-24 6 views
1

まず、EF 4.1コードを使用しています。既存のエンティティにOrderListのnull以外のコレクションが含まれていて、新しい注文リストが追加されました。EF 4.1コードを使用してICollectionナビゲーションプロパティを持つエンティティを最初に更新する

public class Order 
{ 
    public int Id { get; set; 
    public string Name { get; set;} 

    public ICollection<OrderList> OrderLists { get; set;} 
} 

public class OrderList 
{ 
    public int Id { get; set;} 
    public int OrderId { get; set;} 
    public string ItemDescription { get; set;} 
    public decimal Price { get; set;} 

    public virtual Order Order { get; set;} 
} 

これは私がOrderエンティティを更新するために使用していたコードで以下のように私は、ドメインモデルを持っています。

まず、EF 4.1コードを使用してこれを達成する方法を教えてください。

おかげ 達人は

答えて

1

これはトリックを行う必要があります。

var order = context.Orders 
        .Include("OrderLists") 
        .FirstOrDefault(o => o.Id == orderId); 
order.Name = "New name"; // this gets saved 

foreach (var orderlist in order.OrderLists.ToList()) 
{ 
    context.OrderLists.Remove(orderlist); 
} 

order.OrderLists.Clear();     

order.OrderLists.Add(new OrderList { Id = order.Id, ItemDescription = "New Item" }); 

context.SaveChanges(); 

あなたは個別にオーダーリストの項目を削除してから、コレクションをクリアする必要があります。

+0

ありがとうございました。これはリポジトリパターンを通して理解できますか?私は複数のエンティティにアクセスしています(この場合はcontext.Orders amd context.OrderLists)。 Orderエンティティには、ICollectionアイテムがいくつか追加される可能性がありますか? –

+0

一般的な方法ですべてのコレクションアイテムをクリアしたい場合は、リフレクションを見ることができますが、このエンティティのすべてのコレクションアイテムをクリアすることは少し危険です:)データベース全体のロードを意味する可能性があります。 –

関連する問題