Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF更新异常:将datetim2数据类型转换为datetime_C#_.net_Entity Framework_Entity Framework 4.1_Linq To Xml - Fatal编程技术网

C# EF更新异常:将datetim2数据类型转换为datetime

C# EF更新异常:将datetim2数据类型转换为datetime,c#,.net,entity-framework,entity-framework-4.1,linq-to-xml,C#,.net,Entity Framework,Entity Framework 4.1,Linq To Xml,我正在将一些小XML文件解析为EF对象,然后将它们加载到SQLServer2008数据库中 表定义: CREATE TABLE [dbo].[Events]( [ID] IDENTITY(1,1) PRIMARY KEY CLUSTERED NOT NULL, [EventDate] datetime NULL ) XML: 推送到数据库: foreach(var event in events) { dbContext.Events.Add(event); } dbC

我正在将一些小XML文件解析为EF对象,然后将它们加载到SQLServer2008数据库中

表定义:

CREATE TABLE [dbo].[Events](
    [ID] IDENTITY(1,1) PRIMARY KEY CLUSTERED NOT NULL,
    [EventDate] datetime NULL
)
XML:

推送到数据库:

foreach(var event in events)
{
    dbContext.Events.Add(event);
}
dbContext.SaveChanges();
我得到以下错误:

System.Data.SqlClient.SqlException: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.
我四处搜索,尝试了以下所有方法,但均无效:

  • 将EDMX“ProviderManifestToken”从“2008”更改为“2005”
  • 将“StoreGeneratedPattern”更改为“Computed”
  • 修改Linq到XML表达式

似乎什么都没用。。。这里没有想法了…

如果我从XML字符串解析日期时间,我会尝试使用
DateTime.Parse

看起来可以用一个简单的
字符串来解析日期时间。替换


我以为有一个解析函数可以将格式化字符串传递给它(比如
“yyyy-MM-ddThh:MM:ss”
),但我现在似乎找不到文档。

如前所述,请尝试直接解析日期

EventDate = DateTime.ParseExact(x.Attribute("date"), "yyyy-MM-ddTHH:mm:ss", Culture.InvariantCulture)
尝试将DateTime.MinValue或DateTime.MaxValue插入sql时,通常会出现此类错误。这不是个好主意。你能把事件打印出来吗

events.ForEach( x => Console.WriteLine(x.EventDate) )

解决方案与解析特定日期时间无关。我忘了在db中有一个datetime列使用了默认约束。一旦我处理好了这个,一切都很顺利。

听起来演员阵容失败了。尽管它看起来像一个标准格式,但请确认您得到的日期是否正确。否则,使用
if(DateTime.TryParse(..){EventDate=parsedDate;}或者{EventDate=null;}
检查您是否调试过?当您尝试将
EventDate
添加到上下文时,它的值是多少?@ErOx我实际上没有发布代码示例。你到底试了什么?
EventDate = DateTime.ParseExact(x.Attribute("date"), "yyyy-MM-ddTHH:mm:ss", Culture.InvariantCulture)
events.ForEach( x => Console.WriteLine(x.EventDate) )