【发布时间】:2015-10-29 20:32:11
【问题描述】:
我有一个简单的方法,它使用实体框架将一行插入到我们的一个表中。但是,该表有一个触发器,可以在插入该行后立即对其进行操作。这似乎通过产生错误“存储更新、插入或删除语句影响了意外的行数 (0)”来制作实体框架。我该如何纠正这个问题?
using (var supportContext = new SupportContext(CustomerId))
{
var mobileUser = new AcctMobileUser
{
amu_user_id = userId
};
supportContext.AcctMobileUsers.Add(mobileUser);
await supportContext.SaveChangesAsync();
}
【问题讨论】:
-
见here
-
当它在任何情况下都不是竞争条件时,它很可能与更改跟踪器有关。我希望表中有一个自动增量,但不是你的模型。在这种情况下,EF 尝试使用您提供的 Id 保存您的条目,DBMS 将 Id 设置为自己的值,EF 会检查它是否正确保存并且找不到具有您提供的 Id 值的条目。
-
这取决于您的触发器实际在做什么。禁用 changetracker 非常容易,但我认为这对您的情况没有帮助。在您的情况下,关闭乐观并发可能会有所帮助,但我真的不建议这样做。
-
当您打开身份插入并基本上将插入调用包装在事务中时会发生什么?当仍然出现同样的错误时,您的触发器正在做一些可疑的事情,您很可能必须自己计算插入 sql 语句。
标签: c# entity-framework entity-framework-6