Я пытаюсь использовать исправления 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', не найдено
Единственный способ обойти это, как я обнаружил, состоит в том, чтобы вызвать альтернативный способ запроса сущности из контекста в -
var entity = dataContext.Customers
.Include(ent => ent.Quotes)
.SingleOrDefault(ent => ent.Id == id);
entity.Quotes = entity.Quotes.OrderBy(ent => ent.Order).ToList);
Что не идеально, так как мне не нравится идея запрашивать данные для их обновления. Мне интересно, есть ли более чистый подход к этому.