C# 使用实体框架和MVC4 SQL Server插入后不会触发触发器

C# 使用实体框架和MVC4 SQL Server插入后不会触发触发器,c#,sql-server,entity-framework,asp.net-mvc-4,triggers,C#,Sql Server,Entity Framework,Asp.net Mvc 4,Triggers,我有以下问题 我使用触发器为我的网站做统计 在我的控制器中,我使用以下代码: db.MyModel.Add(model); db.SaveChanges(); 在SQLServerManagementStudio中插入记录时,触发器工作正常。但当我从网站插入记录时,我的触发器不会触发 我在另一张桌子上有类似的触发器,它们都很好用。我不知道为什么只有这张桌子会出问题。我还试图删除edmx文件并再次创建它,但仍然没有成功。 我需要做些什么来让它工作吗 我使用的是实体框架5、MVC4、Visua

我有以下问题

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

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

 db.MyModel.Add(model);
 db.SaveChanges();
在SQLServerManagementStudio中插入记录时,触发器工作正常。但当我从网站插入记录时,我的触发器不会触发

我在另一张桌子上有类似的触发器,它们都很好用。我不知道为什么只有这张桌子会出问题。我还试图删除edmx文件并再次创建它,但仍然没有成功。 我需要做些什么来让它工作吗

我使用的是实体框架5、MVC4、VisualStudio2012、MSSQL Server 2008 R2

多谢各位

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

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

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

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

编辑: @格特·阿诺德——是的,你的评论是对的。我粘贴了错误的链接,但找不到正确的了。公平地说,我已经删除了链接,但我的答案是正确的。即使在使用sp_executesql'query_string'的SSM中,也不会在表上触发触发器。解决方法是创建一个包含所需操作的存储过程,并通过以下方式从EF调用它:

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

触发器将按预期触发。

实体框架没有任何魔法可以让它绕过触发器。尝试运行SQL探查器以查看哪些命令正在命中数据库。从探查器中查看SQL跟踪的结果会很有帮助。查看触发器本身的内容也会有所帮助。我还没有对分析器做过任何研究。所以请稍等。我需要谷歌,并将张贴的SQL跟踪结果,如果我仍然不能找到问题。谢谢大家:可能是我的信息不是很清楚。db.MyModel.Addmodel中的模型;是从web表单创建的新实体。并成功地将新记录插入到数据库中。这意味着INSERT INTO语句已经出现了,对吗?很抱歉,我是新手:要么触发器配置不正确,要么没有将记录插入表中。您是否可以使用SQL Server Management Studio查看记录,使用[TableInQuestion]中的SELECT*查看您随web应用程序插入的记录?是的,已插入记录。但扳机仍然无法触发。我还尝试在该表上创建新触发器,但它在web应用程序插入后仍然不会触发。直接插入数据库仍然有效。更新后的另一个触发器仍在web应用程序上工作。使用触发器代码更新您的问题,并使用探查器获取实体框架生成的代码。触发器不是可选的,无法阻止触发器运行->触发器写入错误或未插入数据。错误!这个链接并没有说明一个功能,而是一个bug。我在sp_executesql+no trigger fired上发现的每一次点击都是错误的或完全愚蠢的触发代码导致了错误。我敢说sp_executesql不触发触发器是极不可能的。唯一接近的是,但这是另一个问题。@Gert Arnold,如果在SSMS的标准查询中触发触发器没有错误,那么它的代码就可以了。。。但是,如果你能找到任何解决方案或原因,为什么它没有被解雇,请在这里留下评论-我会很高兴了解一些新的东西。