EF CTP5 POCO,基类以及如何实现继承

时间:2011-02-03 09:25:09

标签: entity-framework poco entity-framework-ctp5

嘿 让我说我希望我的所有唱片都有标准印章。

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

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

我不想将基类用于其他任何事情。 在我的Db上下文中; 我想使用与db表对应的结束POCO类。 DbSet,看起来我必须使用DbSet强硬,然后使用OfType来查询:)

2 - 如果继承不在上下文中,你会推荐什么,ComplexType,一个接口呢?

2 个答案:

答案 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映射。