【发布时间】:2016-12-18 07:47:36
【问题描述】:
我有一个使用实体框架的 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
【问题讨论】:
-
Entity Framework 没有任何魔法可以让它绕过触发器。尝试运行 SQL Profiler 以查看哪些命令正在访问数据库。
-
你忘了
SaveChanges()在你的数据库上下文吗? -
不,我没有忘记
-
是否有多个实体被更改?尝试单独保存每个实体的更改
-
@ِAhmed 你找到解决办法了吗?
标签: c# sql-server entity-framework triggers