为什么在使用Entity Framework插入后不会触发SQL Server触发器?

时间:2016-12-18 07:47:36

标签: c# sql-server entity-framework triggers

我有一个使用Entity Framework的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, 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 

1 个答案:

答案 0 :(得分:0)

我相信您的触发器调用 - 它只是有缺陷且无法正常执行。

看看它:

DECLARE @totalLoan decimal, @totalpaid decimal, @balance decimal    

SELECT @totalLoan = l.Total_Amount 
FROM dbo.Loans l

你想在这做什么?您有一个名为@TotalLoan单一变量,并且您正在为其分配整个Loans表,Total_Amount列?该表中只有一行吗?否则,这是有效作业 - 您无法将整个表格分配给单个变量.....

下一个声明也是如此 - 你再次基本上将整个表分配给一个变量 - 只有不能可能正常工作!

真的试图在这做什么?您可能需要在语句中添加WHERE子句,或者您是否计划使用SUM(....)进行这些任务,或者执行其他操作以使其工作 - 但我很确定此触发器 被调用,它只是不能做你期望它做的事情,因为它有缺陷