与SQL Server的DateTime相比,System.DateTime可以接受更大范围的值。因此,有一个类System.Data.SqlTypes.SqlDateTime,它模仿后者。
因此,我希望实体框架选择SqlDateTime,但它没有。
所以我的问题是...
当您尝试将DateTime值保存到数据库时,有哪些最佳实践可确保这些值不会导致问题?
有没有办法强制EF使用SqlDateTime?
发布于 2010-10-16 01:04:51
你可以做很多事情:
DateTimeDATETIME2或DATETIME2数据类型。您不能使用这些新的数据类型,在将数据存储到持久性存储之前,将由您对日期字段进行一些检查/验证。EF EntityObject提供了许多方法来深入了解验证和保存对象的过程-选择一种适合您的方法发布于 2011-01-05 03:44:41
更具体地说,试试这个:http://www.vfstech.com/?p=111
发布于 2013-09-26 16:30:59
也许这是一个老帖子,但我会把我的发现贴在其他帖子上:
假设我们有开发环境: 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; }
}使用这样的自定义映射:
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();
}这会产生this,这意味着我们将出现溢出异常。
在仍然使用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");提供此error。切换到SQL Server Standart 2012似乎解决了这个问题(这不是一个确定的解决方案-只是为了实验)。创建的SQL Server架构为this。
我不是Sql专家,但在我看来,SQL CE does not support these dates。开发环境的问题。遗骸。DateTime是可以替代的,但也会带来很多重构。
还要记住SqlDateTime and DateTime are very different。
我发现一个很好的解决方案--对代码和项目生命周期都有好处--就是像上面stackoverflow中的一个链接所建议的那样,在LocalDb和SQL standart之间切换,并结合自定义fluentApi映射设置,以平衡模型创建或两者兼而有之。
引入custom convention in EF作为安全网看起来也不错。
如果有人有更好的全面的解决方案,无论是代码还是开发-生产,请发布它。
https://stackoverflow.com/questions/3943944
复制相似问题