Có lẽ đây là một chủ đề cũ nhưng tôi sẽ đăng những phát hiện của tôi về vấn đề này cho những người khác:
Hãy nói rằng chúng ta có dev env: EF 5, CodeFirst, SqlCE 4.0:
public abstract class Entity : IEntity, IEquatable<Entity>
{
public virtual int Id { get; protected set; }
public virtual DateTime LastModified { get; set; }
[DataType(DataType.Date)]
public virtual DateTime CreatedOn { get; set; }
[DataType(DataType.DateTime)]
public virtual DateTime CreatedOn2 { get; set; }
[DataType(DataType.Time)]
public virtual DateTime CreatedOn3 { get; set; }
public virtual DateTime CreatedOn4 { get; set; }
}
wi th như một ánh xạ tùy chỉnh:
public EntityMapping()
{
HasKey(e => e.Id);
Property(e => e.Id);
Property(e => e.LastModified).IsRequired().IsConcurrencyToken();
Property(e => e.CreatedOn).IsRequired();
Property(e => e.CreatedOn2).IsRequired();
Property(e => e.CreatedOn3).IsRequired();
Property(e => e.CreatedOn4).IsRequired();
}
Điều này tạo ra this, có nghĩa là chúng tôi sẽ có ngoại lệ tràn.
Thay đổi ánh xạ để điều này trong khi vẫn làm việc với SQL CE 4.0:
Property(e => e.CreatedOn).IsRequired().HasColumnType("datetime2");
Property(e => e.CreatedOn2).IsRequired().HasColumnType("date");
Property(e => e.CreatedOn3).IsRequired().HasColumnType("date");
Property(e => e.CreatedOn4).IsRequired().HasColumnType("datetime2");
Cho error này. Chuyển sang SQL Server Standart 2012 dường như giải quyết vấn đề (Đó không phải là giải pháp chắc chắn - chỉ dành cho thử nghiệm). Lược đồ SQL Server đã tạo là this.
Tôi không phải là chuyên gia về Sql nhưng có vẻ như với tôi là SQL CE does not support these dates. vấn đề với env phát triển. vẫn còn. DateTime có thể được thay thế nhưng có thể mang lại rất nhiều refactoring ở đây và tehere.
Cũng nhớ rằng SqlDateTime and DateTime are very different. Giải pháp mà tôi thấy tốt - cho mã và vòng đời của dự án - là chuyển đổi giữa standart LocalDb và SQL như được đề xuất bởi một trong các liên kết ở trên từ stackoverflow kết hợp với các thiết lập bản đồ fluentApi tùy chỉnh để cân bằng việc tạo mô hình hoặc cả hai .
Giới thiệu custom convention in EF làm lưới an toàn cũng có vẻ tốt.
Nếu có ai có giải pháp toàn diện hơn, cho mã và cho cả hai sản xuất, hãy đăng nó lên.