2017-08-06 54 views
1

存储日期每当我试图创建一个新用户的CreateAsync抛出一个异常,其中的InnerException是: "The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.\r\nThe statement has been terminated." 此错误打开了超过100个类似的查询,但大多比较据我所知,与我的情况相关的是老的和没有的。 中的SQLExpress数据库的字段定义为无法在身份DB asp.net核心和EF

[DOB] [datetime] NULL, 

起初我试图存储在“ApplicationUser”模式有效的20世纪的日期。该字段在模型中定义:

 [Required)] 
     public DateTime DOB { get; set; } 

我读了这个问题的原因,许多文章和无法找到一个解决方案,因此要想继续发展,我决定只是忽略它暂时和将该字段设置为空并继续。所以我改变了定义ApplicationUser

 [Column("DOB",TypeName = "datetime")] 
     public Nullable<DateTime> DOB { get; set; } 

,并在控制器将其设置为null硬编码的值忽略所提供的值。但问题依然存在。问题可能是什么?

任何帮助非常感谢。

+0

您是否尝试过流利的api? –

+0

我不确定你的意思。除了在Startup中配置服务以使用SQL和Identity之外,我创建的唯一其他东西是'ApplicationUser',它扩展了'IdentityUser'。其他的一切都由UserManager管理。我确实想知道Identity使用EF的定义文件在哪里,但我认为所有这些都是自动发生的。我应该直接指出'ApplicationUser'的字段存储在数据库中的位置吗?除了这个日期之外,它似乎已经很好地完成了所有这一切。 –

+0

我的意思是,如果你试图用你的实体为身份DbContext添加配置并且流利的api –

回答

1

我打算前往微软并找到SQL团队并安排公开执行。人们需要学会做出适当的错误信息。

因为我正在测试并在数据库中插入出生日期,我只是假定datetime2到datetime的转换是指DOB字段。但是,当然,错误消息中未提及受影响的列。

正如它发生的那样,数据库中有另一个日期,JoinDate,它是由帐户创建时由控制器添加的,它是这个字段是问题所在。当然,这是我的错误 - 我应该初始化该字段,但是如果错误消息包含列名,我将在几秒钟内修复它,而不是几天。

这就像那些说“无法打开指定文件”但其中指定的文件永远不会被命名的错误消息。

</rant>

+0

你没有解决我的问题。我的问题实际上完全不相关。但我有一个很好的笑,所以我投了这个:-) – Wndrr