Я нашел это работает в 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());
// Additional configuration....
}
Добавьте атрибут ко всем свойствам 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; }
}