Сначала необходимо обновить объект с помощью свойства навигации ICollection с использованием кода EF 4.1 - PullRequest
1 голос
/ 24 октября 2011

Сначала я использую код EF 4.1, и у меня возникают проблемы с обновлением сущности Order, когда существующая сущность содержит ненулевую коллекцию OrderList, а пользователь удалил несколько из существующих и добавил новый список заказов.

У меня есть модель домена, как показано ниже

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;}
}

Это код, который я использую для обновления сущности заказа.

using (var context = new MyDbContext())
{
    var order = context.Orders
                        .Include("OrderLists")
                        .FirstOrDefault(o => o.Id == orderId);

    order.Name = "New name"; // this gets saved
    order.OrderLists.Clear(); // Does not delete the existing order list items
    order.OrderLists = new List<OrderList> { new OrderList { OrderId = order.Id, ItemDescription = "New Item" } };  // Does not create new list

    context.Orders.Attach(order);
    context.Entry<Order>(order).State = System.Data.EntityState.Modified;
    context.ChangeTracker.DetectChanges();
    context.SaveChanges();
}

Пожалуйста, объясните мне, как я могу сначала добиться этого, используя код EF 4.1?

Спасибо Гуру

1 Ответ

1 голос
/ 24 октября 2011

Это должно сработать:

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();

Вам необходимо удалить элементы списка заказов по отдельности, а затем очистить коллекцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...