拥有所有实体派生自的BaseEntity类型或接口更好吗?

DDi*_*ita 2 entity-framework-4.1

目前,我已经创建了一个基本实体类型,我的所有实体都将从中派生出来.

public abstract class BaseEntity
    {

        /// <summary>
        /// Key Field for all entities
        /// </summary>
        /// 
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }


        /// <summary>
        /// Date entity was created
        /// </summary>
        public DateTime DateCreated { get; set; }

        /// <summary>
        /// Last date Modified
        /// </summary>
        public DateTime DateModified { get; set; }

        /// <summary>
        /// keep track of Row Version used for concurrency
        /// </summary>
        [Timestamp]
        public Byte[] RowVersion { get; set; }

    }
}
Run Code Online (Sandbox Code Playgroud)

我正在考虑将我的模型与实体框架分离,因此它不依赖于它.我想有另一个项目用于我的EF实现.所以,我想在该项目中包含将构成模型中关系的映射.

由于我的BaseEntity类是一个抽象类,因此保持我的[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]和[TimeStamp]属性的最佳方式是什么,以便它将使用流畅的API和单独的映射应用于我的所有派生实体文件?我不认为我可以设置建模器来添加BaseEntity映射,因为它是一个抽象类.我应该创建一个具有所有基本功能的接口并重复所有实体的映射吗?

我正在使用EntityTypeConfiguration类并为我的所有实体创建单独的映射类.

Lad*_*nka 8

你可以使用基类:

public abstract class BaseEntity
{
    public Guid Id { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }
    public Byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,这取决于您是否要映射继承.我想你不想这样定义你的配置,如:

public class BaseEntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
    where TEntity : BaseEntity
{
    public BaseEntityConfiguration()
    {
        HasKey(e => e.Id);
        // This is not very good - check http://stackoverflow.com/questions/6098972/guid-comb-strategy-in-ef4-1-codefirst/6100606#6100606
        Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(e => RowVersion).IsRowVersion();
    }
}    
Run Code Online (Sandbox Code Playgroud)

现在,从BaseEntity派生的每个实体派生其配置BaseEntityConfiguration,