我正在开发一个针对 SQL Server 数据库使用 EF 5 Code First 的应用程序。我的一些域对象继承自DomainEntity
包含共享属性的基本抽象类,例如Id
, DateCreated
,DateModified
等。
默认情况下,EFdatetime
为类型的属性创建列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 中。