1

問題

Web アプリケーションに UnitOfWork とリポジトリ スタイルのデータ アクセス レイヤーを実装しています。作成したカスタム テーブルを使用して、データベースへの変更を監査したいと考えています。この問題は、新しいアイテムがコンテキストに追加されたときに発生します。アイテムはコンテキストに追加されますが、SaveChanges()メソッドが呼び出されていないため、エンティティはまだAdded状態にあります。これは、主キーが割り当てられていないことを意味します。つまり、監査レコードを作成できずSaveChanges()、リポジトリからの呼び出しはリポジトリのコーディング スタイルに違反することになります。追加された状態のエンティティの主キーを取得する方法はありますか?

試みられた解決策

私が考えることができる唯一の解決策は、クライアントがそれらを生成できるように、ランダムな GUID を使用することです。ID フィールドとしてランダムな GUID を使用するとコストがかかる可能性があると聞いたので、少し躊躇しています。

コード

//Method in my repository class
public void Insert(T entity)
{
    //Adds the entity the context
    dbSet.Add(entity);

    Audit audit= new Audit 
    {
        Created = DateTime.Now,
        PrimaryKey = entity.Key, //This is not set because the State of the entity is still Added
    };

    Context.Audits.Add(audit);
}
4

1 に答える 1

2

簡単な答えは、分散環境ではこれを行うことができないということです。アイテムが永続化されると、ID が同じになるとは限りません。

クライアントが生成した GUID を使用すると、問題は解決します。これは私が通常とるアプローチですが、それについての議論を始めないようにしましょう! ほとんどの場合、結果は 50/50 であることがわかります。どちらにも長所と短所があります。あなたのシナリオでは、うまくいきます!

于 2012-07-13T19:13:02.800 に答える