C# 插入项返回-存储更新、插入或删除语句影响了意外的行数(0)

C# 插入项返回-存储更新、插入或删除语句影响了意外的行数(0),c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有一个简单的方法,使用实体框架将一行插入到我们的一个表中。但是,该表有一个触发器,而不是在插入行时立即对其进行操作。这似乎是通过生成错误“Store update、insert或delete语句影响了意外的行数(0)”,从而使实体框架成为一个框架。我怎样才能纠正这个问题 using (var supportContext = new SupportContext(CustomerId)) { var mobileUser = new AcctMobileUser {

我有一个简单的方法,使用实体框架将一行插入到我们的一个表中。但是,该表有一个触发器,而不是在插入行时立即对其进行操作。这似乎是通过生成错误“Store update、insert或delete语句影响了意外的行数(0)”,从而使实体框架成为一个框架。我怎样才能纠正这个问题

using (var supportContext = new SupportContext(CustomerId))
{
    var mobileUser = new AcctMobileUser
    {
        amu_user_id = userId
    };
    supportContext.AcctMobileUsers.Add(mobileUser);
    await supportContext.SaveChangesAsync();
}

您没有显示足够的代码来确定如何在“标题”中发生错误。一切都取决于触发器的编码方式和功能。我建议您获取该代码,它可能会提供有关“标题”更改原因的线索。

您没有显示足够的代码来确定“标题”中如何发生错误。一切都取决于触发器的编码方式和功能。我建议您获取该代码,它可能会为“标题”的更改提供线索。

这是由于EF的乐观并发模型造成的。接收insert的表上的触发器具有“INSTEAD OF insert”条件。这会导致不插入行,而是插入行本身


通过让EF简单地执行任意SQL insert语句,一切都得到了应有的处理。此方法的唯一警告是不会返回对象,因此必须手动获取插入的记录。

这是由于EF的乐观并发模型造成的。接收insert的表上的触发器具有“INSTEAD OF insert”条件。这会导致不插入行,而是插入行本身


通过让EF简单地执行任意SQL insert语句,一切都得到了应有的处理。此方法的唯一警告是不会返回对象,因此必须手动获取插入的记录。

请参见,在任何情况下,当它不是竞争条件时,很可能与更改跟踪器有关。我希望表中有一个自动增量,但不是你的模型。在这种情况下,EF尝试使用您提供的Id保存条目,DBMS将Id设置为其自身的值,EF将检查它是否正确保存,并且找不到具有您提供的Id值的条目。这取决于触发器实际执行的操作。禁用changetracker非常简单,但我认为它对您的情况没有帮助。在您的情况下,关闭乐观并发可能会有所帮助,但我并不建议您这样做。当您打开标识插入并在事务中基本上包装插入调用时会发生什么?当仍然存在相同的错误时,您的触发器正在执行可疑操作,您很可能必须自己计算insert sql语句。让我们看看,在任何情况下,当它不是竞争条件时,它很可能与更改跟踪器有关。我希望表中有一个自动增量,但不是你的模型。在这种情况下,EF尝试使用您提供的Id保存条目,DBMS将Id设置为其自身的值,EF将检查它是否正确保存,并且找不到具有您提供的Id值的条目。这取决于触发器实际执行的操作。禁用changetracker非常简单,但我认为它对您的情况没有帮助。在您的情况下,关闭乐观并发可能会有所帮助,但我并不建议您这样做。当您打开标识插入并在事务中基本上包装插入调用时会发生什么?当仍然是相同的错误时,您的触发器正在做一些可疑的事情,您很可能必须自己计算insert sql语句。让我们看看。为什么这是一个答案?我确切地知道更改列的位置、时间和原因。问题是我无法触动触发器,因为它存在于1000多个客户数据库中,而且可能会变得有点混乱。我需要做的就是告诉实体框架插入记录。禁用乐观并发可能会有所帮助。为什么这是一个答案?我确切地知道在哪里、何时以及为什么要更改列。问题是我无法触动触发器,因为它存在于1000多个客户数据库中,而且可能会变得有点混乱。我需要做的就是告诉实体框架插入记录。也许禁用乐观并发会有所帮助。