Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
Asp.net mvc 将datetime2数据类型转换为datetime数据类型导致值超出范围_Asp.net Mvc_Entity Framework_Datetime - Fatal编程技术网

Asp.net mvc 将datetime2数据类型转换为datetime数据类型导致值超出范围

Asp.net mvc 将datetime2数据类型转换为datetime数据类型导致值超出范围,asp.net-mvc,entity-framework,datetime,Asp.net Mvc,Entity Framework,Datetime,我有一个ASP.NET MVC应用程序,其中我正在编辑一个现有数据库以更新一个特定字段,DateTime。我的数据库有4个字段,其中两个是DateCreated和DateModified。当我尝试更新该字段时,我希望保持DateCreated时间不变,没有理由更新它创建的日期,并且我使用DateTime将DateModified时间更改为当前时间。现在 这里是给定的代码,以防我做错了什么。这是我第一次使用ASP.NET MVC,所以请慢慢来。我见过其他的答案,其中调用了上下文,但我找不到任何引用

我有一个ASP.NET MVC应用程序,其中我正在编辑一个现有数据库以更新一个特定字段,
DateTime
。我的数据库有4个字段,其中两个是DateCreatedDateModified。当我尝试更新该字段时,我希望保持DateCreated时间不变,没有理由更新它创建的日期,并且我使用
DateTime将DateModified时间更改为当前时间。现在

这里是给定的代码,以防我做错了什么。这是我第一次使用ASP.NET MVC,所以请慢慢来。我见过其他的答案,其中调用了
上下文
,但我找不到任何引用。运行应用程序时,我会收到标题中的错误消息,
contractEntity.SaveChanges()
显示为红色

public ActionResult Edit(Contract editContract) {
var contract = (from c in contractEntity.Contracts where c.Id == editContract.Id select c).First();
if (!ModelState.IsValid)
    return View(contract);
// editContract.DateCreated = contract.DateCreated;
// editContract.DateModified = DateTime.Now;
  contractEntity.ApplyCurrentValues(contract.EntityKey.EntitySetName, editContract);
  contractEntity.SaveChanges();
  return RedirectToAction("Index");
}
请,任何帮助都将不胜感激。谢谢。

阅读后,我发现要打开数据库的.edmx文件并更改:

<...Provider="System.Data.SqlClient" ProviderManifestToken="2008".../>



这是可以接受的还是有更好的方法来修复该错误?

对我来说,我也有同样的问题,但问题是在默认情况下,当我保存模型时,创建了一个无效的日期时间。我有一个CreatedOn字段,但没有将其设置为任何值,这意味着该值为01/01/0001,这对于SQL来说是无效的日期时间。设置它为我解决了这个问题。

您也可以编辑模型(或在.edmx中的EF中),并将
StoreGeneratedPattern
设置为针对相关字段计算。这将导致它不会将其保存到该字段,因为它是由SQL server计算的。

我有相同的错误,并且我发现如果SQL 2008 DB具有DateTime可为Null的字段,则不要在代码中显式地将Null(Nothing)赋给该字段,这将导致此错误,或者您可以将所有DateTime字段更改为DateTime2。

只需使用可为空的DateTime,例如DateTime?如果数据库中的列可以为空,则在域实体属性中。这将使它工作。

抱歉,如果我发布了,会有所帮助。此更改将阻止EF使用DATETIME2类型。这是适用于您的应用程序的正确解决方案吗?只有你能这么说。如果你打算使用DATETIME2,那就计划一下。这是适合我的应用程序的正确解决方案,但是你知道解决方法吗?我不知道为什么会发生错误,因为我正在更改的字段是DateTime而不是DateTime2。这是一个非常恼人的问题。我使用的是VS2010、EF4.0,数据库运行在SQLServer2008上。我无法修改数据库以使用datetime2字段。如果EF明确说明edmx中的属性类型会更好,因为现在它说的是“DateTime”,但它正在将其转换为datetime2,而不是DateTime。我想知道为什么EF 4.3代码仍然首先为SQL Server 2008 R2数据库而不是datetime2创建DateTime字段。这种方法在这种情况下效果最好。请注意,只有在数据库中指定了默认值时,它才起作用。由于问题是关于DateCreated和DateModified的,这些可能会被设置为
DEFAULT GETDATE()
我相信,由于这篇文章是写的,手工修改edmx不是答案。2011年发布的这篇文章更有可能是贾米格斯的候选人。
<...Provider="System.Data.SqlClient" ProviderManifestToken="2005".../>