Я пытаюсь использовать исправления Json для обновления объектов, хранящихся в контексте данных Entity Framework.
У меня есть такие классы сущностей -
public class Customer
{
public Guid Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Quote> Quotes { get; set; }
}
public class Quote
{
public Guid Id { get; set; }
public int Order { get; set; }
public string Status { get; set; }
}
Чтобы применить патч к объекту Customer
, я запрашиваю источник из контекста данных, затем применяю патч, например:
var entity = dataContext.Customers.Find(id);
patch.ApplyTo(entity);
dataContext.SaveChanges();
Где patch
состоит из -
[{ "op": "replace", "path": "/name", "value": "new name" }]
Это отлично работает для простых обновлений исходного объекта, проблема возникает, когда я хочу исправить связанные объекты, рассмотрите следующий патч
[{ "op": "replace", "path": "/quotes/0/status", "value": "Closed" }]
Первая проблема, с которой я столкнулся, это -
Целевое местоположение, указанное сегментом пути «0», не найдено
Единственный способ обойти это, который я нашел, - это вызвать alter способ запроса объекта из контекста на -
var entity = dataContext.Customers
.Include(ent => ent.Quotes)
.SingleOrDefault(ent => ent.Id == id);
entity.Quotes = entity.Quotes.OrderBy(ent => ent.Order).ToList);
Что далеко не идеально, так как мне не нравится идея запрашивать данные для их обновления. Мне интересно, есть ли более чистый подход к этому.