C# “如何修复”;SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围。”;
SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围 我的代码如下:C# “如何修复”;SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围。”;,c#,asp.net,entity-framework,webforms,C#,Asp.net,Entity Framework,Webforms,SqlException:将datetime2数据类型转换为datetime数据类型导致值超出范围 我的代码如下: using (var contxt = new realtydbEntities()) { var status = GetStatus(); var repIssue = new RepairIssue() { CreaterId = Auth
using (var contxt = new realtydbEntities())
{
var status = GetStatus();
var repIssue = new RepairIssue()
{
CreaterId = AuthorId,
RepairItemDesc = this.txtDescription.Text,
CreateDate = DateTime.Now,//here's the problem
RepairIssueStatu = status
};
contxt.AddObject("RepairIssues", repIssue);
contxt.SaveChanges();
}
CreateDate属性映射到类型为smalldatetime的列
如何运行此代码?将允许您执行所需操作。问题的根源在于C#DateTime对象比SQL的smalldatetime类型“大”。下面是对这些差异的一个很好的概述: 因此,您真正的选择是:
我也有同样的例外,但这是因为一个不可为null的datetime属性接受了min datetime值。在DB中这不是一个很小的datetime,但是C#的min datetime超过了SQL的min datetime限制。 解决方案显而易见,正确设置日期时间。
顺便说一句,代码不是我的,这就是我不知道该属性的原因:)我出现此错误是因为我在SQL表和应用程序中添加了datetime列,而没有删除旧数据。我发现我可以更新新的记录;但是,当尝试对其中一条记录进行更新时,添加字段之前的表中的记录引发了此错误。将此添加到模型类:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Properties().Configure(c=>c.HasColumnType(“datetime2”);
}
检查迁移内容。我这样改变了我的模型”
公共日期时间?CreationDate{get;set;}
然后添加新的迁移并最终运行更新数据库这并不能解释为什么
DateTime.Now将
不适合SmallDateTime。这与大小无关,而是与它可以存储的范围和精度/精确度有关。DateTime。现在
应该始终是SmallDateTime字段的有效值(除非你将你的电脑时钟设置回300年),但是,我目前在尝试将{04/10/2013 12:49:00}的'DateTime.Now'值保存到SQL SmallDateTime字段时遇到了完全相同的错误。令人沮丧的是,我在任何地方都找不到正确的答案。@TrueBlueAusie自动将“较大”类型转换为不允许使用较小的“类型”,因为信息可能会在转换过程中丢失。“较大”表示“可以容纳更大的数字”或“可以容纳更高的精度”。C#假设这些小数秒很重要,除非您明确表示它们不重要(例如,使用显式强制转换)@GrandOpener:很抱歉,你误解了我的评论。我只是想说答案应该解释为什么dateTime.Now不适用于SmallDateTime。我不是要求解释:)如果你按照你的建议从dateTime
创建SqlDateTime
,那么使用它的值进行EF更新(因为EF属性是DateTime)您仍然会得到完全相同的错误(如果您有此错误)。除非您能够澄清这是如何解决问题的,否则此答案对于EF(问题是关于EF的)来说似乎不正确。您如何正确设置日期时间的可能重复?