从EF 5版本中删除了可插入约定,我在预发行版中看到了吗?寻找一种强制ef代码的方法按惯例使用datetime2,因此不需要显式映射每个实体的每一列。
答案 0 :(得分:2)
遇到了类似的问题。我有一个与您的BaseEntity类似的通用存储库。
public abstract class BaseEntity
{
public int Id { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
}
然后每个实体都是从基础派生的。
public class MyEntity: BaseEntity
{
public string Name{ get; set; }
public int prop1 { get; set; }
public int prop2 { get; set; }
}
我最终使用columm属性设置了BaseEntity的Created和Updated属性,如下所示:
public abstract class BaseEntity
{
[Key, Column(Order = 0)]
public int Id { get; set; }
[Column(TypeName = "datetime2")]
public DateTime Created { get; set; }
[Column(TypeName = "datetime2")]
public DateTime Updated { get; set; }
}
我在(http://dreadjr.blogspot.com/2012/09/entity-framework-5-code-first-datetime2.html)查看了您的解决方案,它看起来也很好,但它需要有一个每个实体的特定配置类。无论如何,我想我会和你分享这个。
答案 1 :(得分:0)
结束创建EntityTypeConfiguration的派生类。
public class CustomEntityTypeConfiguration<T> : EntityTypeConfiguration<T> where T : EntityBase
{
public TEntityTypeConfiguration()
{
this.Property(t => t.CreatedDate).HasColumnType("datetime2");
}
}
然后,每个实体配置都从此继承而不是EntityTypeConfiguration。