将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

时间:2009-11-05 05:12:01

标签: asp.net-mvc entity-framework datetime

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

这是给定的代码,只是在我做错了什么的情况下。这是我第一次使用ASP.NET MVC,所以请温柔。我已经看到了调用Context的其他答案,但我找不到任何引用。当我运行应用程序时,我在标题中收到错误消息,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");
}

请,任何帮助表示赞赏。感谢。

5 个答案:

答案 0 :(得分:38)

对我来说,我有同样的问题,但问题是默认情况下我保存模型时,正在创建无效的DateTime。我有一个字段CreatedOn并没有将它设置为任何东西,这意味着值为01/01/0001这是一个无效的SQL DateTime。设置它摆脱了我的问题。

答案 1 :(得分:19)

阅读this website后,我发现打开了我的数据库的.edmx文件并进行了更改:

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

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

这是可接受的还是有更好的方法来解决这个错误?

答案 2 :(得分:12)

您也可以编辑模型(或.edmx中的EF)并将StoreGeneratedPattern设置为Computed for the field。这将导致它不将其保存到该字段,因为它由SQL服务器计算。

答案 3 :(得分:6)

我有同样的错误,我发现如果你有一个带有DateTime Nullable字段的SQL 2008 DB,请不要在代码中的字段中明确指定Null(Nothing),这会导致此错误,或者你可以将所有DateTime字段更改为DateTime2。

答案 4 :(得分:3)

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