繁体   English   中英

实体框架更新未更新数据库表

[英]Entity Framework update is not updating database table

我有我认为适用于Entity Framework更新SQL Server表的代码。 单步执行代码不会出现错误。

var newsToUpdate = db.tblTips.Find(id);
//if(TryUpdateModel(newsToUpdate, "",))
try
{
    db.SaveChanges();
}
catch (RetryLimitExceededException)
{
    ModelState.AddModelError("", "unable to save changes");
}
  1. 注意,我有if(TryUpdateModel(...行,当数据库表DID中的记录更新时,我不记得是否使用过它。
  2. 我可以看到该模型具有正确的id
  3. 数据库表未更新。

我该怎么办才能弄清楚C#visual studio中为什么不更新记录? 没有错误。

更新:

我的模型是tblTips,我方法上的签名是

public ActionResult AddNews(tblTips tips, int? groupid, int? id)

似乎更新页不了解其他列,并尝试将其试图将其更新为null的所有列更新为db,在db表中该列为“ not null”

是“确定”(是的,我知道我应该使用viewmodel)来执行以下操作以从更新中排除列?

db.Entry(tips).State = EntityState.Modified;
db.Entry(tips).Property(x => x.createdby).IsModified = false;
db.SaveChanges();

我想我不应该相信我在Stackoverflow上阅读的所有内容,但都失败了

附加类型为'BRM.Data.Models.tblTips'的实体失败,因为相同类型的另一个实体已经具有相同的主键值。 如果图形中的任何实体具有相互冲突的键值,则使用“附加”方法或将实体的状态设置为“不变”或“修改”时,可能会发生这种情况。 这可能是因为某些实体是新实体,尚未收到数据库生成的键值。 在这种情况下,请使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。

就目前而言,您的代码现在说“从数据库中取出东西,然后保存我刚刚进行的任何更改”,但实际上它从未改变过从数据库中取出的东西。

当您注释掉对TryUpdateModel()的调用时,最有可能出现问题,ASP.NET MVC使用该调用根据传递给HTTP请求的参数对给定对象进行修改。

我强烈建议使用版本控制系统,以使其更容易查看在任何给定时间点所做的更改,并撤消因错误而更改的内容。

如果查看DbContext.SaveChanges的文档,则会看到它提到了以下内容...

将在此上下文中进行的所有更改保存到基础数据库。

由于您未进行任何更改(在显示的代码中),因此正在发生预期的结果。

另外,api public virtual int SaveChanges()建议您可以从SaveChanges获取更新的记录数,例如

var recordsUpdated = db.SaveChanges();

在您发布的代码中,没有对任何数据进行任何更改。 实体框架正确地确定了这一点,并且不发出任何更新语句。

看起来, TryUpdateModel调用是进行更改的原因,尽管如果不查看它的代码就无法分辨。 由于此呼叫已被注释掉,因此更改不会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM