我正在开发一个针对SQL Server数据库使用EF 5 Code First的应用程序。我的一些域对象继承自包含共享属性的基本抽象类DomainEntity
,例如Id
,DateCreated
,DateModified
等。
默认情况下,EF会为datetime
类型的属性创建DateTime
列。我一直在寻找一种方法来告诉它为smalldatetime
的所有子类创建DomainEntity
列。
我尝试了以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Ignore<DomainEntity>();
modelBuilder.Entity<DomainEntity>()
.Property(e => e.DateCreated).HasColumnType("smalldatetime");
}
不幸的是上面没有效果。如果我删除了Ignore<DomainEntity>
行,那么EF会创建一个名为DomainEntities
的单独表格。
似乎唯一有效的方法是在DateTime
的每个子类中明确映射DomainEntity
属性,但显然这是不切实际的,因为我有几十个这样的类。
我正在尝试做什么?
当我使用数据注释[System.ComponentModel.DataAnnotations.Schema.Column(TypeName="smalldatetime")]
修饰基类的日期属性时,它可以正常工作。
虽然我真的更喜欢将这个特定于数据库的映射信息保存在EF上下文中,而不是我的POCO中。