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
    提供了许多方法来利用验证和保存对象的过程-选择一种适合您的方法


更具体地说,试试这个:

也许这是一个旧的线程,但我会将我的发现发布给其他人:

假设我们有dev env:ef5、CodeFirst、sqlce4.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; }
}
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映射设置来平衡模型创建或两者

作为一个安全网的引入看起来也不错

如果有人对代码和开发产品都有更好的全面解决方案,请发布