1

ねえ、すべてのレコードに標準のスタンプを付けたいとしましょう。

inserted_by, inserted_at, updated_by, updated_at, deleted_by, deleted_at, timestamp

1-これを基本(おそらく抽象)POCOクラスに配置する必要がある場合、これを実装するための最良の継承戦略は何でしょうか。(主キーとして GUID を使用しています。)

基本クラスを他の目的で使用したくありません。私のDbコンテキストでは; db テーブルに対応するエンド POCO クラスを使用したいと思います。DbSet、DbSetをタフに使用する必要があるように見えます。次に、OfTypeを使用してクエリを実行します:)

2 - 継承が文脈から外れている場合、ComplexType、Interface など、何をお勧めしますか?

4

2 に答える 2

1

私はEF4でまさにそれを行います。汎用リポジトリ基本クラスがあります。

public class GenericRepository<T> : IGenericRepository<T> where T : BaseEntity

すべてのエンティティ リポジトリは、このクラスから継承します。汎用の .Add() および .Update() メソッドは、監査データを自動的に設定します。

public void Add(T entity)
{
        entity.CreatedOn = DateTime.UtcNow;
        entity.CreatedBy = UserName;
        entity.LastModifiedOn = entity.CreatedOn;
        entity.LastModifiedBy = entity.CreatedBy;
        ObjectContext.AddObject(GetEntitySetName<T>(), entity);
}

public void Update(T entity)
{
        T originalEntity = ObjectSet.Single(t => t.Id == entity.Id);            
        entity.CreatedOn = originalEntity.CreatedOn;
        entity.CreatedBy = originalEntity.CreatedBy;
        entity.LastModifiedOn = DateTime.UtcNow;
        entity.LastModifiedBy = UserName;
        ObjectSet.ApplyCurrentValues(entity);
}

BaseEntityしたがって、POCOの責任ではないため、POCO 基本クラスには含まれないことがわかります。代わりに、リポジトリに属します。

于 2011-02-03T09:31:39.080 に答える
0

TPC 継承が必要です (クラスごとのテーブルまたは具象型ごとのテーブル)。TPC の CTP5 マッピングに関するこの記事を確認してください。

于 2011-02-03T10:38:35.737 に答える