2

私のデータベースには、各テーブルの最後に 5 つのフィールドがあります。

  • 作成日
  • によって作成された
  • 変更日
  • によって変更

エンティティ フレームワークを使用して、データベースの POCO オブジェクトを生成しています。すべての CRUD 操作を処理する Dal レイヤーがあります。

5 つのフィールドに入力するために同じコードを常にコピー アンド ペーストするのは面倒です。任意のエンティティ オブジェクトを処理し、フィールドに入力できるジェネリック メソッドを誰かが持っているかどうか疑問に思っています。

4

1 に答える 1

2

これらのプロパティを持つ共通の基本クラスを実装し、その基本クラスからPOCOクラスを派生させる必要があります。

コンテキストクラスでSaveChanges()をオーバーライドすることにより、Create/ModifiedDateやUserなどの設定を自動的に処理できます。これにより、オブジェクトコンシューマーは、クラスが消費されるすべての場所でこれらのプロパティを設定する必要がなくなります。

これが私のプロジェクトの1つからのその種のコードの例です(私の場合、LastModifiedプロパティを持つオブジェクトはインターフェースIHasLastModifiedを実装します):

    public override int SaveChanges()
    {
        DateTime now = DateTime.UtcNow;
        foreach (ObjectStateEntry entry in (this as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
        {
            if (!entry.IsRelationship)
            {
                IHasLastModified lastModified = entry.Entity as IHasLastModified;
                if (lastModified != null)
                    lastModified.LastModified = now;
            }
        }

        int changes = base.SaveChanges();
        return changes;
    }
于 2013-01-16T18:55:59.520 に答える