単純なオブジェクトグラフの例を挙げようとします。
以下の構造のブログを考えてみましょう。
Posts
PostID
Title
Description
PostUpdates
PostUpdateID
PostID
Title
Description
DateUpdated
UpdatedBy
ApprovedBy
PostStatus(Approved/Rejected)
ここで私のロジックは投稿を表示することになり、最終更新と承認後の更新が行われます。この場合、実際には何も変更されません。常に新しいセットの変更が追加され、古いバージョンを削除することができます。
保存する場合は、PostUpdatesに新しいPostUpdateエントリを追加します。
スーパー管理者は、すべての更新を表示して、正しいものを承認することができます。管理者がアップデートの承認を決定すると、Postは最後に承認されたPostUpdateの内容で修正されます。
別の代替(より一般的な)
あなたは、従うよう
RowUpdates
RowUpdateID
TableName
TableKey
NewValues (kind of XML store to save which fields were modified)
UpdatedBy
ApprovedBy
DateUpdated
UpdateStatus (Approved/Rejected)
をテーブルを作成することができますが、この場合には、あなたはDBに値を保存しないようするためにリフレクションを使用して、代わりに新しいRowUpdateを作成する必要があります管理者が承認した場合にのみ、リフレクションマッピングを実行した後で実際の値をdbに通知する必要があります。
データベース設計に関する情報を提供して、どのフィールドと関係が正確に公開され、承認が必要なのでしょうか? –
私は、スキーマ固有のソリューションではなく、汎用ソリューションを探しています。あるソリューションが他のエンティティではなく一部のエンティティで機能する特別な理由はありますか? –
EFは、生成されたコードをカスタマイズし、保存する前に変更を検証する方法を提供します。しかし、あなたの承認などのロジックはビジネスロジックであり、EFは単なるデータアクセスレイヤーです。また、管理者が未承認の変更を視覚化する方法も、ビジネスロジックの一部です。単一項目は問題ではありませんが、オブジェクト階層は一般化するのが複雑です。 –