C# 为什么SQL Server触发器在使用实体框架插入后不触发?
我有一个使用实体框架的C#应用程序,我在数据库中创建了一个触发器,在插入和更新后触发 我注意到,当我使用EF代码插入或更新时,触发器不会触发,另一方面,当我通过SQL Server插入或更新时,触发器会触发C# 为什么SQL Server触发器在使用实体框架插入后不触发?,c#,sql-server,entity-framework,triggers,C#,Sql Server,Entity Framework,Triggers,我有一个使用实体框架的C#应用程序,我在数据库中创建了一个触发器,在插入和更新后触发 我注意到,当我使用EF代码插入或更新时,触发器不会触发,另一方面,当我通过SQL Server插入或更新时,触发器会触发 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[updateLoanFinishing] ON [dbo].[Installments_Paids] AFTER INSERT, UPDATE,
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[updateLoanFinishing]
ON [dbo].[Installments_Paids]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @totalLoan decimal, @totalpaid decimal, @balance decimal
SELECT @totalLoan = l.Total_Amount
FROM dbo.Loans l
SELECT @totalpaid = ISNULL(SUM(ip.Paid_Amount), 0)
FROM dbo.Installments_Paids ip
SELECT @balance = @totalLoan - @totalpaid
IF @balance = 0
BEGIN
UPDATE dbo.Loans
SET dbo.Loans.IsFinish = 1 -- bit
FROM dbo.Loans l
INNER JOIN INSERTED i ON i.Loan_ID = l.Loan_ID
END
ELSE IF @balance > 0
BEGIN
UPDATE dbo.Loans
SET dbo.Loans.IsFinish = 0 -- bit
FROM dbo.Loans l
INNER JOIN INSERTED i ON i.Loan_ID = l.Loan_ID
END
END
我相信你的触发器被调用了,它只是有缺陷,不能正常执行 看看它:
DECLARE @totalLoan decimal, @totalpaid decimal, @balance decimal
SELECT @totalLoan = l.Total_Amount
FROM dbo.Loans l
你在这里想干什么??您有一个名为@totaloan
的单变量,您正在为它分配整个贷款
表,总金额
列?那张表中只有一行吗??否则,这不是一个有效的赋值-您不能将整个表分配给单个变量
下一条语句也是如此——同样,您基本上是将整个表分配给一个变量,不可能运行
你到底想在这里做什么??您可能需要在语句中添加一个
WHERE
子句,或者您是否计划对这些赋值使用SUM(…)
,或者做一些其他事情来使它们工作-但是我很确定这个触发器被称为,它不能做你期望它做的事情,因为它有缺陷实体框架没有任何魔法可以让它绕过触发器。请尝试运行SQL Profiler以查看哪些命令正在访问数据库。您是否忘记在数据库上下文上执行SaveChanges()
?尝试单独保存每个实体的更改@Ahmed你找到解决方案了吗?