2011-12-07 4 views
1

この例では、EntitySetからオブジェクトを切り離しても、すべての子エンティティがデタッチされないようです(advertised)。ここでEntitySet Detachメソッドが子エンティティをデタッチします

は、モデルの:

public class Order 
{ 
    [Key] 
    public int Id { get; set; } 
    public string OrderData { get; set; } 

    [Include] 
    [Association("Order_OrderDetail", "Id", "Order_Id")] 
    public IEnumerable<OrderDetails> Details { get; set; } 
} 
public class OrderDetails 
{ 
    [Key] 
    public int Id { get; set; } 
    public int Order_Id { get; set; } 
    public String OrderDetailData { get; set; } 
} 

は、ここでのDomainServiceです:

public IQueryable<Order> GetOrders() 
{ 
    var orders = new[] { 
     new Order { Id = 1, OrderData="Order 1", 
      Details = new [] 
      { 
       new OrderDetails { Id=1, Order_Id=1, OrderDetailData="Order 1 Detail 1"}, 
       new OrderDetails { Id=2, Order_Id=1, OrderDetailData="Order 1 Detail 2"}, 
       new OrderDetails { Id=3, Order_Id=1, OrderDetailData="Order 1 Detail 3"}, 
      } 
     }, 
     new Order { Id = 2, OrderData="Order 2", 
      Details = new [] 
      { 
       new OrderDetails { Id=4, Order_Id=2, OrderDetailData="Order 2 Detail 1"}, 
       new OrderDetails { Id=5, Order_Id=2, OrderDetailData="Order 2 Detail 2"}, 
       new OrderDetails { Id=6, Order_Id=2, OrderDetailData="Order 2 Detail 3"}, 
      } 
     }}; 

    return orders.AsQueryable(); 
} 

public IQueryable<OrderDetails> GetOrderDetails() 
{ 
    throw new NotImplementedException(); 
} 

そして最後にここでの問題を実証し、クライアント側のメソッドです:DetachAction方法がある場合は

private OrderContext LocalContext; 
    public MainPageViewModel() 
    { 
     if (!IsInDesignMode) 
     { 
      LocalContext = new OrderContext(); 
      LocalContext.Load(LocalContext.GetOrdersQuery()); 
      Orders = new PagedCollectionView(LocalContext.Orders); 
      DetachCommand = new RelayCommand<Order>(DetachAction); 
     } 
    } 

    public RelayCommand<Order> DetachCommand { get; private set; } 
    private void DetachAction(Order source) 
    { 
     try 
     { 
      LocalContext.Orders.Detach(source); 
      var newContext = new OrderContext(); 
      newContext.Orders.Attach(source); 
     } 
     catch (Exception exception) 
     { 
      MessageBox.Show(exception.Message); 
     } 
    } 

それは成功して呼び出されたインスタンスをデタッチしますが、例外をスローしますインスタンスを別のDomainContextにアタッチしようとしたときに発生します。例外は次のとおりです。 Entity 'OrderDetails:1'は、このEntityContainerがすでに別のEntityContainerに接続されているため、このEntityContainerに接続できません。

おそらく、私はそれを言うときのドキュメントが何を意味するのか理解していない: エンティティは、組成階層のルートである場合は、すべての子エンティティも を取り外すことになるがのルートを外れた順序ではないです構成上の階層?

答えて

1

私は問題の鍵はドキュメントを誤解されると思う:

エンティティは、組成階層のルート

であればあなたのDetailsプロパティは、組成ではありません。ただし、 '[Composition]'属性を追加すると簡単に作成できます。

関連する問題