Учитывая этот пример, кажется, что отсоединение объекта от его EntitySet не отсоединяет все дочерние сущности, как объявлено .
Вот модель:
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();
}
И, наконец, вот методы на стороне клиента, которые демонстрируют проблему:
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);
}
}
Когда метод DetachAction вызывается, он успешно отсоединяет экземпляр, который был передан в, но выдает исключение при попытке присоединить экземпляр к другому DomainContext.Исключением является: сущность OrderDetails: 1 не может быть присоединена к этому EntityContainer, поскольку она уже присоединена к другому EntityContainer.
Возможно, я не понимаю, что означает документация, когда в нем говорится: Еслисущность является корнем композиционной иерархии, все дочерние сущности также будут отсоединены Не является ли Орден, который был отсоединен, корнем композиционной иерархии?