使用EF Code First时将datetime2数据类型转换为datetime数据类型出现错误?

16

我在我的asp.net mvc应用中使用EF Code First。 这是我的代码:

Request.RequestDate = DateTime.Now;

我数据库中的RequestDate类型是datetime。使用上述代码时出现了以下错误:

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

请帮帮我,谢谢。


可能是重复的问题:C#将datetime2数据类型转换为datetime数据类型 - CodeCaster
你正在使用 SQL 2005 吗?datetime2 范围从 0001/01/01 到 9999/12/31,因此会出现错误。如果是这样,您需要编辑XML edmx 文件。 - Jason Jong
@json jong:我正在使用SQL Server 2008,因为我使用Code First,所以没有.edmx文件!。 - Mohammad Zare
不能回答,除非看到类模型和抛出异常的(完整)代码。 - Gert Arnold
3个回答

13

我正在使用 Code First,没有 .edmx 文件。 - Mohammad Zare
我认为你需要做的是指定该列的类型为datetime。你的代码首先生成了数据库吗?你试图将一个datetime2对象存储在datetime列中。 - Blast_dan
是的,我的数据库已经成功地使用Code First生成,并且该列的类型为datetime。 - Mohammad Zare
你使用的是哪种 SQL 数据库? - Blast_dan

9

从我的角度来看,问题出在日期时间类型的字段没有设置为可空类型,有时候在构造函数中没有初始化该字段。我通过将该字段设置为可空类型来解决了这个问题。

public DateTime? MyDate { get; set; }

另一种解决方案是在构造函数中无论如何都初始化该字段。


这对我解决了问题。反思一下,错误信息并不是很好。我创建了一个DateTime列,为什么它要尝试将其转换为其他类型?为什么不直接告诉我违反了约束条件... - sarin

0
    --in your sql script:
        create table tablename(mydate DateTime not null default GETDATE())


        //in your c# object:
        public class tablename
        {
          public string mydate {get; set; } = null;
        }

        //in your C# method using EF:
        private async Task mymethod()
        {
            DateTime myDateTime = DateTime.Now;
            string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
            dbContext.tablename.add(new tablenam{mydate = sqlFormattedDate });
            await dbContext.SaveChangesAsync();
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接