Encontré que esto funciona muy bien en EF6.
Creé una convención para especificar mis tipos de datos. Esta convención cambia el tipo de datos DateTime predeterminado en la creación de la base de datos de datetime a datetime2. Luego aplica una regla más específica a cualquier propiedad que haya decorado con el atributo 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"));
}
}
Luego registre la convención en su contexto:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Add(new DateConvention());
}
Agregue el atributo a las propiedades de fecha y hora que desee que sean solo de fecha:
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
si apunta a una base de datos que no admite la fecha. SQL Server 2014 lo hace.