Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么SQL Server触发器在使用实体框架插入后不触发?_C#_Sql Server_Entity Framework_Triggers - Fatal编程技术网

C# 为什么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,

我有一个使用实体框架的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 

我相信你的触发器被调用了,它只是有缺陷,不能正常执行

看看它:

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

SELECT @totalLoan = l.Total_Amount 
FROM dbo.Loans l
你在这里想干什么??您有一个名为
@totaloan
单变量,您正在为它分配整个
贷款
表,
总金额
列?那张表中只有一行吗??否则,这不是一个有效的赋值-您不能将整个表分配给单个变量

下一条语句也是如此——同样,您基本上是将整个表分配给一个变量,不可能运行


你到底想在这里做什么??您可能需要在语句中添加一个
WHERE
子句,或者您是否计划对这些赋值使用
SUM(…)
,或者做一些其他事情来使它们工作-但是我很确定这个触发器被称为,它不能做你期望它做的事情,因为它有缺陷

实体框架没有任何魔法可以让它绕过触发器。请尝试运行SQL Profiler以查看哪些命令正在访问数据库。您是否忘记在数据库上下文上执行
SaveChanges()
?尝试单独保存每个实体的更改@Ahmed你找到解决方案了吗?