2011-10-03 51 views
0

我有客户订单集合。我有一些订单identificators我需要添加到新的客户实例是这样的:加入收藏现有辨识器

var customer = new Customer(); 
customer.Orders.Add(new Order() { Id = 1 }); 
customer.Orders.Add(new Order() { Id = 2 }); 
customer.Orders.Add(new Order() { Id = 3 }); 

是否有可能不retrieveing approapriate单实例?

回答

2

是的,这是可能的,但你必须按正确的顺序。最简单的方法是:

var order1 = new Order { Id = 1 }; 
context.Orders.Attach(order1); // Now context knows the order and it tracks it as unchanged 

var customer = new Customer(); 
context.Customers.AddObject(customer); // Now context knows the customer and it tracks it as a new 

customer.Orders.Add(order1); // Now context knows about new relation between new customer and existing order 

如果你这样做,你在你的例子显示,你会拨打:

context.Customers.AddObject(customer); 

和上下文将跟踪客户和所有相关的订单作为一个新的,所以你将有手动将所有订单状态更改为不变以避免重复插入:

foreach (var order in customer.Orders) 
{ 
    if (order.Id != 0) 
    { 
     context.ObjectStateManager.ChangeObjectState(order, EntityState.Unchagned); 
    } 
}