1

嘿,假设我希望我的所有记录都在它们上面贴上标准印章。

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

1 - 如果我必须把它放在一个基础(也许是抽象的)POCO 类中,实现它的最佳继承策略是什么。(我使用 GUID 作为主键。)

我不想将基类用于其他任何事情。在我的数据库上下文中;我想使用与 db 表对应的 end POCO 类。DbSet,看来我得用DbSet了,然后用OfType来查询:)

2 - 如果继承与上下文无关,您会推荐什么,ComplexType,也许是接口?

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);
}

所以你可以看到它没有进入 POCO 基类BaseEntity,因为它不是 POCO 的责任。相反,它属于存储库。

于 2011-02-03T09:31:39.080 回答
0

您需要 TPC 继承(每个类的表或每个具体类型的表)。查看这篇关于 TPC 的 CTP5 映射的文章。

于 2011-02-03T10:38:35.737 回答