使用实体框架与 MVC4 SQL Server 插入后,触发器不会触发

本文关键字:触发器 插入 Server 实体 框架 SQL MVC4 | 更新日期: 2023-09-27 18:31:38

我有以下问题。

我使用触发器为我的网站做统计。

在我的控制器中,我使用以下代码:

 db.MyModel.Add(model);
 db.SaveChanges();

当我在 SQL Server Management Studio 中插入记录时,我的触发器工作得很好。但是当我从网站插入记录时,我的触发器不会触发。

我在其他表上有类似的触发器,它们都运行良好。我不知道为什么只有这张表会导致问题。我也尝试删除edmx文件并再次创建它,但仍然没有运气。我需要做些什么来使其正常工作吗?

我正在使用Entity Framework 5,MVC4,Visual Studio 2012,MSSQL Server 2008 R2。

谢谢。

更新#1:从网站插入记录时,新记录将保存到数据库,但不会发生触发。程序不会生成任何错误。

使用实体框架与 MVC4 SQL Server 插入后,触发器不会触发

如果 SQL Server 中出现UPDATEINSERT INTO语句,触发器将触发。 编写的代码不会直接执行更新,除非您在db.SaveChanges();之前实际更改了一些数据

唯一的另一种可能性是触发器在 DML 操作之前被禁用,并在之后启用。

我在将实体框架与SQL Server数据库一起使用时遇到了同样的问题。

要在数据库上触发触发器,您需要在"db"之后使用"TransactionScope"发送"提交"。SaveChanges();' 命令。

我正在使用实体框架核心库。下面是一个示例:

<小时 />
using (var ts = new TransactionScope())
{
    using (var db = new DbContext()) // Modify to you Context Class
    {
        // Your logic code
            
        db.MyModel.Add(model);
        db.SaveChanges();
        
        // commit
        ts.Complete();
    }
}
EF

使用sp_executesql('query_string')语句进行查询。在这种情况下,不会触发触发器。

编辑:@Gert阿诺德 - 是的,你的评论是对的。我粘贴了错误的链接,但找不到正确的链接了。公平地说,我已经删除了链接,但我的答案是正确的。即使在 SSMS 中使用 sp_executesql('query_string') 也不会在表上触发触发器。解决方法是创建具有所需操作的存储过程,并按如下方式从 EF 调用它:

dbContext.Database.SqlQuery<YourModel>("StoredProcedureName",params);

触发器将按预期触发。