Обновление Entity Framework версии строки в предопределенном порядке - PullRequest
2 голосов
/ 10 ноября 2011

Я использую C #, EF и SQL Server и у меня мало таблиц с родительскими и дочерними отношениями.Их больше 2, но в этом примере для простоты я буду использовать только 2.

Настольная книга

Id
DateModified
RowVersion

Таблица страниц

Id
BookId - this is foreign key to Book.Id
RowVersion

Когда какая-либо страница / страницы являются обновлениями, мне нужно обновить DateModified в таблице Book.

Мы используем RowVersion для отслеживания изменений, так как это уникальное значение, которое я хочувсегда иметь возможность получать последние изменения для каждой книги, просто делая что-то вроде

SELECT * FROM Page
WHERE RowVersion > Book.RowVersion

Но для этого мне нужно убедиться, что таблица RowVersion в Book ВСЕГДА обновляется до RowVersions in Pages.

В моем слое EDM у меня сейчас есть что-то вроде этого:

class Page
{
  void OnPageChanged() //this is hooked to OnPropertyChanged
  {
     this.Book.UpdateDateModified(DataTime.Now);
  }
}

В результате этого страница обновляется первой, а ее RowVersion обновляется первым послетранзакция совершается.Это не то, что мне нужно.

Вопрос, если я перейду OnPageChanged() для обработки события OnPropertyChanging - будет ли это гарантировать последовательность?OnPropertyChanged определяет порядок обновления в sql, генерируемый EF?Любые другие предложения для этого случая?

1 Ответ

3 голосов
/ 11 ноября 2011

Я не думаю, что это возможно. Я не могу попробовать это сейчас, но у меня есть реальные сомнения, что вы можете сравнить метки времени (RowVersion) в запросе Linq. Он сопоставлен с байтовым массивом, а байтовый массив несопоставим. Порядок операций в базе данных абсолютно не зависит от вас. Вы не можете основывать свою логику на ожидаемом порядке, в котором объекты будут обновляться. Вы можете сделать это только в том случае, если ваши страницы и книга будут сохранены двумя разными SaveChanges вызовами. В таком случае вы вообще не можете использовать OnPropertyChanges, и вы должны обработать Book изменения вручную, прежде чем вносить какие-либо изменения в свои страницы.

...