【发布时间】:2015-08-25 19:07:19
【问题描述】:
我有我认为适用于实体框架更新 sql 服务器表的代码。单步执行代码时我没有收到错误。
var newsToUpdate = db.tblTips.Find(id);
//if(TryUpdateModel(newsToUpdate, "",))
try
{
db.SaveChanges();
}
catch (RetryLimitExceededException)
{
ModelState.AddModelError("", "unable to save changes");
}
- 请注意,我有
if(TryUpdateModel(...行,我不记得在数据库表中的记录 DID 更新时是否使用过它。 - 我可以看到模型有正确的
id - 数据库表未更新。
我可以做些什么来弄清楚为什么在 C# Visual Studio 中它不更新记录?没有错误。
更新:
我的模型是 tblTips ,我的方法上的签名是
public ActionResult AddNews(tblTips tips, int? groupid, int? id)
似乎更新页面不知道其他列并尝试更新它试图将列更新为空的所有列,其中在 db 表中该列是“非空”
是否“可以”(是的,我知道我应该使用视图模型)执行以下操作以从更新中排除列?
db.Entry(tips).State = EntityState.Modified;
db.Entry(tips).Property(x => x.createdby).IsModified = false;
db.SaveChanges();
我想我不应该相信我在 Stackoverflow 上读到的所有内容,上面都失败了
附加“BRM.Data.Models.tblTips”类型的实体失败,因为 另一个相同类型的实体已经具有相同的主键 价值。使用“附加”方法或设置 如果实体中有任何实体,则实体的状态为“未更改”或“已修改” 图有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在 这种情况下使用 'Add' 方法或 'Added' 实体状态来跟踪 图表,然后将非新实体的状态设置为“未更改”或 酌情“修改”。
【问题讨论】:
-
你实际上改变了什么?我可以看到您正在从数据库中获取记录,但没有对其进行任何处理,然后调用
SaveChanges()? -
您的代码在这里非常有限,可能存在很多问题。您是否尝试使用 SQL 分析器查看是否有任何 SQL 发送到您的数据库?
-
你得到什么错误?
-
newsToUpdate 中没有修改数据。据我们从这个示例中可以看出,它可能正在保存到数据库中,但原始对象中没有新值。
-
好的,所以我有一个模型 tblTips 提示,其中更新了一些字段,但我看到我不希望它更新所有字段并且它正在尝试更新一个字段是带有 null 的“非空”,所以我正在编写这段代码,我希望这不是“坏事。db.Entry(tips).State = EntityState.Modified; db.Entry(tips).Property( x => x.createdby).IsModified = false;
标签: c# linq entity-framework