目前我已经创建了一个基本实体类型,我的所有实体都将从中派生出来。
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; }
}
}
我正在考虑将我的模型与实体框架分离,因此它不依赖于它。我想有另一个项目用于我的EF实现。所以,我想在该项目中包含将构成模型中关系的映射。
由于我的BaseEntity类是一个抽象类,因此保持我的[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]和[TimeStamp]属性的最佳方式是什么,以便它将使用fluent API应用于我的所有派生实体和单独的映射文件?我不认为我可以设置建模器来添加BaseEntity映射,因为它是一个抽象类。我应该创建一个具有所有基本功能的接口并重复所有实体的映射吗?
我正在使用EntityTypeConfiguration类并为我的所有实体创建单独的映射类。
答案 0 :(得分:7)
您可以使用基类:
public abstract class BaseEntity
{
public Guid Id { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public Byte[] RowVersion { get; set; }
}
现在,这取决于您是否要映射继承。我想你不想这样定义你的配置:
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();
}
}
现在,从BaseEntity
派生的每个实体从BaseEntityConfiguration
,
答案 1 :(得分:0)