我有一个5列的数据表,其中一行被数据填充,然后通过事务保存到数据库。

保存时,返回一个错误:

将datetime2数据类型转换为datetime数据类型会导致值超出范围

它暗示,正如阅读,我的数据表有一个类型的DateTime2和我的数据库一个DateTime;这是错误的。

date列设置为DateTime,如下所示:

新数据专栏(“myDate, Type.GetType”)

问题

是否可以在代码中解决这个问题,或者是否必须在数据库级别上更改某些内容?


当前回答

有时它在开发机器上工作得很好,而在服务器上则不行。在我的例子中,我必须写:

<globalization uiCulture="es" culture="es-CO" />

在网络上。配置文件。

机器(服务器)中的时区是正确的(CO地区),但web应用程序不是。这个设置完成了,它再次工作正常。

当然,所有的约会都是有价值的。

:D

其他回答

继承的datetime属性有问题

当不可为空的日期字段在插入/更新时值为null时,通常会显示此错误消息。其中一个原因可能是遗传。

如果你的日期是从基类继承的,你不做映射EF将不会读取它的值。

欲了解更多信息: https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines

将此代码添加到ASP中的类中。NET为我工作:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
}

我在一个简单的控制台应用程序项目中遇到了这个问题,我的快速解决方案是通过运行这个方法将任何可能的datetime2日期转换为可空的datetime:

static DateTime? ParseDateTime2(DateTime? date)
    {
        if (date == null || date.ToString() == "1/1/0001 12:00:00 AM")
        {
            return null;
        }
        else
        {
            return date;
        }
    }

这当然不是一个完全全面的方法,但它满足了我的需要,也许它会帮助其他人!

有时EF不知道它是在处理计算列还是触发器。按照设计,这些操作将在插入操作后的EF之外设置一个值。

修复方法是在EF的edmx中为StoreGeneratedPattern属性中的列指定Computed。

对我来说,这是当列有一个插入当前日期和时间的触发器时,参见下面的第三部分。


解决方法

在Visual Studio中打开模型浏览器页面,然后是模型,然后是实体类型->

选择实体和日期时间属性 选择StoreGeneratedPattern 设置为Computed


对于这种情况,其他答案是变通的,因为列的目的是在创建记录时指定一个时间/日期,而SQL的任务是执行一个触发器来添加正确的时间。例如下面的SQL触发器:

DEFAULT (GETDATE()) FOR [datecrecreated]。

对我来说,我有一个Devexpress DateEdit组件,它通过nullable model属性绑定到可空的datetime MSSQL列。我所要做的就是在DateEdit上设置AllowNullInput = True。将其设置为“默认”会导致日期1.1.0001出现-仅在离开DateEdit之前-然后由于上面提到的后续指示,我得到了此转换错误消息。