嘿 让我说我希望我的所有唱片都有标准印章。
inserted_by, inserted_at, updated_by, updated_at, deleted_by, deleted_at, timestamp
1 - 如果我必须把它放在一个基础(也许是抽象的)POCO类中,那么实现它的最佳继承策略是什么。 (我使用GUID作为主键。)
我不想将基类用于其他任何事情。 在我的Db上下文中; 我想使用与db表对应的结束POCO类。 DbSet,看起来我必须使用DbSet强硬,然后使用OfType来查询:)
2 - 如果继承不在上下文中,你会推荐什么,ComplexType,一个接口呢?
答案 0 :(得分: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的责任。相反,它属于存储库。
答案 1 :(得分:0)
您需要TPC继承(每个类的表或每个具体类型的表)。检查this article关于TPC的CTP5映射。