Entity framework 实体框架和SqlDateTime溢出最佳实践
Entity framework 实体框架和SqlDateTime溢出最佳实践,entity-framework,sqldatetime,Entity Framework,Sqldatetime,System.DateTime可以采用比SQL Server的DateTime更大范围的值。因此有类System.Data.SqlTypes.SqlDateTime,它模仿后者 因此,我希望实体框架选择SqlDateTime,但它没有 所以我的问题是 当您试图将日期时间值保存到数据库时,有哪些最佳实践可以确保这些值不会引起问题 有没有办法强迫EF使用SqlDateTime?您可以做很多事情: 如果您使用的是SQL Server 2008或更高版本,则可以在数据库上使用与.NET的日期范围相同的
System.DateTime
可以采用比SQL Server的DateTime更大范围的值。因此有类System.Data.SqlTypes.SqlDateTime
,它模仿后者
因此,我希望实体框架选择SqlDateTime,但它没有
所以我的问题是
当您试图将日期时间值保存到数据库时,有哪些最佳实践可以确保这些值不会引起问题
有没有办法强迫EF使用SqlDateTime?您可以做很多事情:
- 如果您使用的是SQL Server 2008或更高版本,则可以在数据库上使用与.NET的日期范围相同的
或DATE
数据类型DATETIME2
- 如果您不能使用这些新的数据类型,那么在将数据存储到持久存储区之前,您需要对日期字段进行一些检查/验证。EF
提供了许多方法来利用验证和保存对象的过程-选择一种适合您的方法EntityObject
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; }
}
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");
这将产生溢出异常,这意味着将出现溢出异常
在仍使用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");
给这个。
切换到SQL Server Standart 2012似乎解决了这个问题(这不是一个确定的解决方案——只是为了实验)。创建的SQL Server架构为
我不是Sql方面的专家,但在我看来是这样的。发展环境的问题。残余DateTime可以被替换,但可以带来大量的重构
还要记住这一点
对于代码和项目生命周期来说,我认为好的解决方案是在LocalDb和SQL standart之间切换,正如上面stackoverflow中的一个链接所建议的那样,并结合自定义fluentApi映射设置来平衡模型创建或两者
作为一个安全网的引入看起来也不错
如果有人对代码和开发产品都有更好的全面解决方案,请发布