实体框架6 / SQL Server触发器-获取错误

piztneat  于 2023-01-29  发布在  SQL Server
关注(0)|答案(3)|浏览(232)

我有一个EF6解决方案,我想在一个表上添加一个触发器,以记录对新表的更改。这是由于我们正在与外部数据库进行集成。基本上,他们希望记录对表所做的更改,以便进行同步。
当我通过SSMS(Azure SQL DB)执行时,触发器工作正常,但当我通过我们的Web应用测试时,我收到以下错误:
(0x80131904):如果DML语句包含不带INTO子句的OUTPUT子句,则该语句的目标表“DestinationTable”不能具有任何已启用的触发器。
基本上,看起来我无法将触发器分配给使用实体框架的表。
有人知道怎么做吗?
先谢了

e4yzc0pl

e4yzc0pl1#

我已经发现了这个问题,它与我们正在使用的一个名为ZEntity. BulkOperations. Extension的扩展包有关。大卫Browne的评论让我记录了这个错误,一个内部异常指向ZEntity BulkInsert作为错误。然后我发现了这个链接https://github.com/zzzprojects/EntityFramework-Extensions/issues/334,其中指出这个包确实处理触发器。我所要做的就是停止并重新启动使用DB和包的服务,从而新添加的触发器将被ZEntity发现。
TLDR;我只需要停止和启动服务,让ZEntity包知道添加的触发器。
感谢所有回答的人!

9njqaruj

9njqaruj2#

这是一个模糊的边缘情况,但我发现自己在这里,因为我看到这个错误使用Microsoft.EntityFrameworkCore.SqlServer 7.0.0-preview。
当我恢复到6.0.8时,这个bug消失了。
我在预览版上开发是对的。

bcs8qyzn

bcs8qyzn3#

使用EF Core 7.X时遇到相同错误
我在表上有一个触发器,插入时返回了一个错误。

The target table 'MyTable' of the DML statement cannot have any enabled 
triggers if the statement contains an OUTPUT clause without INTO clause

如果我在没有逻辑的情况下破坏触发器,我仍然会收到错误。禁用触发器解决了错误。但是,如果我执行手动插入,SSMS不会返回任何错误。
我的解决方案,(让DBContext实体对象知道表上有一个触发器)。
将Fluent API更新为...

builder.Entity<MyTable>(entry =>
    {
       entry.ToTable("MyTable", tb => tb.HasTrigger("MyTable_Insert"));
    });

有关EF Core 7.0(EF7)中的突破性更改主题的详细信息,请访问Microsoft站点

相关问题