Tôi thấy điều này hoạt động tốt trong EF6.
Tôi đã tạo một quy ước để chỉ định kiểu dữ liệu của mình. Quy ước này thay đổi kiểu dữ liệu DateTime mặc định trong việc tạo cơ sở dữ liệu từ datetime thành datetime2. Sau đó, nó áp dụng một quy tắc cụ thể hơn cho bất kỳ thuộc tính nào mà tôi đã trang trí bằng thuộc tính 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"));
}
}
Sau đó đăng ký rồi quy ước trong ngữ cảnh của bạn:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Add(new DateConvention());
}
Thêm thuộc tính vào bất kỳ thuộc tính DateTime nào mà bạn chỉ muốn là ngày:
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
nếu bạn đang trỏ vào một DB không hỗ trợ ngày tháng. SQL Server 2014 không.