我发现它在EF6中很好用。
我创建了一个约定来指定我的数据类型。此约定将数据库创建中的默认DateTime数据类型从datetime更改为datetime2。然后,它将更具体的规则应用于我用DataType(DataType.Date)属性修饰的任何属性。
public class DateConvention : Convention
{
public DateConvention()
{
this.Properties<DateTime>()
.Configure(c => c.HasColumnType("datetime2").HasPrecision(3));
this.Properties<DateTime>()
.Where(x => x.GetCustomAttributes(false).OfType<DataTypeAttribute>()
.Any(a => a.DataType == DataType.Date))
.Configure(c => c.HasColumnType("date"));
}
}
然后在您的上下文中注册然后约定:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Add(new DateConvention());
}
将属性添加到希望仅作为日期的任何DateTime属性中:
public class Participant : EntityBase
{
public int ID { get; set; }
[Required]
[Display(Name = "Given Name")]
public string GivenName { get; set; }
[Required]
[Display(Name = "Surname")]
public string Surname { get; set; }
[DataType(DataType.Date)]
[Display(Name = "Date of Birth")]
public DateTime DateOfBirth { get; set; }
}
Sequence contains no matching element
如果您指向的数据库不支持日期,则可能会出错。SQL Server 2014可以。