Bu işe yarıyor EF6'da güzel buldum.
Veri türlerimi belirlemek için bir kural oluşturdum. Bu kural, veritabanı oluşturmadaki varsayılan DateTime veri türünü datetime'dan datetime2'ye değiştirir. Daha sonra DataType (DataType.Date) özniteliğiyle dekore ettiğim tüm özelliklere daha özel bir kural uygular.
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"));
}
}
Ardından, kendi bağlamınıza göre kongre kaydedin:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Add(new DateConvention());
}
Özniteliği yalnızca tarih olmasını istediğiniz herhangi bir DateTime özelliğine ekleyin:
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
Tarihi desteklemeyen bir DB'yi gösteriyorsanız hata alabilirsiniz . SQL Server 2014 yapar.