私はC#、EF、SQL Serverを使用しており、親子関係のあるテーブルがいくつかあります。2つ以上ありますが、この例では、簡単にするために2つだけを使用します。
テーブルブック
Id
DateModified
RowVersion
テーブルページ
Id
BookId - this is foreign key to Book.Id
RowVersion
1つまたは複数のページが更新されたらDateModified
、ブックテーブルで更新する必要があります。
変更を追跡するために使用しています。これは、次のような操作RowVersion
を行うだけで、各本の最新の変更を常に取得できるようにしたいという独自の価値があるためです。
SELECT * FROM Page
WHERE RowVersion > Book.RowVersion
RowVersion
ただし、これを行うには、 inテーブルが常にinの前にBook
更新されていることを確認する必要があります。RowVersions
Pages
私のEDMレイヤーには、現在次のようなものがあります。
class Page
{
void OnPageChanged() //this is hooked to OnPropertyChanged
{
this.Book.UpdateDateModified(DataTime.Now);
}
}
これを行うと、ページが最初に更新され、トランザクションがコミットされた後、そのRowVersionも最初に更新されます。それは私が必要としているものではありません。
質問、代わりにイベントOnPageChanged()
を処理するように移動する場合OnPropertyChanging
、これにより一貫性が保証されますか?EFによって生成されたSQLで更新が行われる順序を決定するのはそれOnPropertyChanged
ですか?この場合の他の提案はありますか?