使用带有MVC4 SQL Server的Entity Framework插入后,触发器不会触发

时间:2013-09-18 03:47:20

标签: c# sql-server entity-framework asp.net-mvc-4 triggers

我有以下问题。

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

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

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

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

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

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

谢谢。

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

2 个答案:

答案 0 :(得分:1)

如果SQL Server中出现UPDATEINSERT INTO语句,则会触发该触发器。除非您在db.SaveChanges();

之前实际更改了某些数据,否则您编写的代码不会直接执行更新

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

答案 1 :(得分:0)

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

编辑: @Gert Arnold -是的,您的评论正确。我粘贴了错误的链接,但无法再找到正确的链接。公平地说,我已经删除了链接,但是我的回答是正确的。即使在使用sp_executesql('query_string')的SSMS中,也不会在表上触发触发器。解决方法是使用所需的操作创建存储过程,并通过EF这样调用它:

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

触发器将按预期触发。