Ответ, как часто бывает, «это зависит».
Поскольку почти всегда можно иметь Order
без каких-либо OrderDetail
s, вы правы, что родительский объект должениметь свойство RowVersion
.
Можно ли изменить OrderDetail
без , также изменяя Order
?Должно ли это быть?
Если это невозможно и не должно быть, свойство RowVersion
на уровне детализации ничего не добавляет.Вы уже поймали все возможные модификации, проверив Order
'RowVersion
.В этом случае добавьте только свойство на верхнем уровне и прекратите чтение здесь.
В противном случае, если два независимых контекста загружают один и тот же порядок и детали, оба изменяют другой OrderDetail
, и оба пытаются сохранитьВы хотите рассматривать это как конфликт?В некоторых случаях это имеет смысл.В других случаях это не так.Чтобы рассматривать его как конфликт, самое простое решение - пометить Order
как измененный, если он не изменился (используя ObjectStateEntry.SetModified
, а не ObjectStateEntry.ChangeState
).EF проверит и вызовет обновление свойства Order
RowVersion
, и сообщит, если кто-либо еще внес какие-либо изменения.
Если вы хотите разрешить двум независимым контекстам изменять два разных OrderDetail
с одинаковыми Order
, да, вам нужен атрибут RowVersion
на уровне детализации.
При этом: если вы загружаете Order
и OrderDetail
s в один и тот же контекст, изменитеOrderDetail
и сохраните ваши изменения, Entity Framework также может проверять и обновлять Order
RowVersion
, даже если вы на самом деле не изменили Order
, вызывая ложные исключения параллелизма,Это было помечено как ошибка, и исправление доступно, или вы можете установить .NET Framework 4.5 (в настоящее время доступен в форме кандидата на выпуск), который исправляет это, даже если ваше приложение использует .NET 4.0.