我有一个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");
}
请,任何帮助表示赞赏。感谢。
答案 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?在您的域实体属性中,如果数据库中的列可以为空。这将使它发挥作用。