У меня есть две сущности. Первый - «Заказ»
public class Order : EntityBase
{
public Guid ClientKey { get; set; }
public Guid EmployeeKey { get; set; }
public DateTime CreatedOn { get; set; }
public DeliveryType DeliveryType { get; set; }
public Address Address { get; set; }
public Client Client { get; set; }
public Employee Employee { get; set; }
public bool SoftDeleted { get; set; }
public virtual ICollection<JourneyOrder> JourneyOrder { get; set; }
**public virtual ICollection<Item> Items
{ get; set; }**
public virtual ICollection<ItemToBeFactored> ItemToBeFactored
{ get; set; }
public Order() : base()
{
Items = new HashSet<Item>();
ItemToBeFactored = new HashSet<ItemToBeFactored>();
JourneyOrder = new HashSet<JourneyOrder>();
CreatedOn = DateTime.Now;
}
}
и второе: «Элемент»:
public class Item : EntityBase
{
public string Name { get; set; }
public double Height { get; set; }
public double width { get; set; }
public string Color { get; set; }
public Guid OrderKey { get; set; }
**public Order CustomerOrder { get; set; }**
}
Я пытаюсь обновить свойство навигации в объекте Order в этом коде:
var order = _context.Orders.Where(x => x.Key.Equals(new Guid("67972aa1-2bb4-4916-b48b-1fdc3c2f5db9"))).Include(x => x.Items).
First();
order.Items = new List<Item>
{
new Item { Color = "Green", width = 20d }
};
_context.SaveChanges();
Я получил эту повторяющуюся ошибку:
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: «Ожидается, что операция с базой данных затронет 1 строку (и), но фактически затронет 0 (и) строку (и). Данные могут быть изменены или удалены, так как объекты были загружены
Обновление работает со свойством one-to-on, но не со свойством навигации one-many !!
Обновление:
Я мог бы использовать обновление пустышкой !!
Во-первых: я очистил предметы от заказа,
то
_context.Items.add( new Item { OrderKey = order.Key, Color = "Blue", width = 240d })
then _context.SaveChanges();
Но это не эффективный способ !! -