Мы используем EF STE какое-то время, но наше приложение сильно выросло, и мы решили подать в суд на новый 4.1 DbContext, чтобы мы могли «развить» отдельный бизнес-уровень поверх наш слой данных, не используя для этого разные типы.EF 4.1 Свойства DBC-контекста и навигации
В элементарной оценке для DbContext способа делать вещи, я столкнулся с небольшой проблемой.
Я привык запрашивать и преднагрузке требуется связанные данные, такие как:
return context.Orders.Include("Detail").SingleOrDefault(ord => ord.ID == ID);
И затем отправить возвращаемый объект в пользовательский интерфейс для изменения, и при возврате из пользовательского интерфейса сохранения изменений в базу данных.
Из того, что я читал до сих пор, делая «изменение экономии» в DbContext легко сделать, используя такой код:
context.Entry(order).State = EntityState.Modified;
Проблема с этим кодом является то, что он на самом деле помечает все свойства в объекте, как изменено, вещь, которая не допускается для некоторых свойств в моей модели (бизнес-правило).
я прибег к следующему решению (который, кажется, требует много кода для относительно небольшого требования BTV, изменение модифицированной государственной собственности на Unchanged не поддерживаются!):
context.Orders.Attach(order);
DbEntityEntry<Order> ordEntity = context.Entry(order);
string[] arr =
{
ordEntity.Property(ord => ord.ID).Name,
ordEntity.Property(ord => ord.ClientID).Name,
};
foreach (string prop in ordEntity.OriginalValues.PropertyNames)
{
if (!arr.Contains(prop))
{
ordEntity.Property(prop).IsModified = true;
}
}
context.SaveChanges();
Проблемы Я столкнувшись с этим кодом, заключается в том, что оператор «Прикрепить» бросает исключение, говоря, что в свойствах навигации в прикрепленном объекте есть какой-то конфликт, даже если никаких изменений вообще не было сделано! (сохранение объекта точно так же, как оно было извлечено из базы данных). Сообщение об ошибке примерно такое: «Конфликтующие изменения в роли« Деталь »отношения« OrdersDatamodel.FK_Order_Detail »были обнаружены».
Вопросов:
- Есть ли более «элегантный» способ для предотвращения изменения определенных свойств объекта?
- Кто-нибудь знает, что происходит с исключением, возникающим при прикреплении объекта к контексту?
Спасибо.
Может кто-нибудь помочь! – wassim