如何解决删除审核表SQL Server数据库的触发器
我将Mircosoft SSMS用于我的sql服务器,并将ASP.NET CORE用于我的网站。
以下查询是我的删除触发器。但是,每当我尝试删除网站中的某些内容时,都会弹出此错误:“ InvalidCastException:无法将类型为“ System.Guid”的对象转换为类型为“ System.Int32”。”
删除触发器:
create trigger Branch_Delete
on Branch
after delete
as
begin
set nocount on;
declare @BranchID uniqueidentifier
select @BranchID = deleted.BranchID
from deleted
insert into AuditLog(TableName,ModifiedBy,AuditDateTime,ID,AuditAction)
Values
('Branch',SUSER_SNAME(),GETDATE(),@BranchID,'Delete')
select BranchID from Deleted
end
型号:
namespace Test.Models
{
public class BranchModel
{
[Key]
[Display(Name = "Branch ID")]
public Guid BranchID { get; set; }
[Required(ErrorMessage = "Please Enter The Branch Name ..")]
[Display(Name = "Branch Name")]
public string BranchName { get; set; }
[Required(ErrorMessage = "Please Enter The Branch Address ..")]
[Display(Name = "Branch Address")]
public string BranchAddress { get; set; }
}
}
控制器(用于删除功能):
public async Task<IActionResult> DeleteBranch(Guid? id)
{
if (id == null)
{
return NotFound();
}
var branchModel = await _context.Branch
.FirstOrDefaultAsync(m => m.BranchID == id);
if (branchModel == null)
{
return NotFound();
}
return View(branchModel);
}
// POST: BranchModels/Delete/5
[HttpPost,ActionName("DeleteBranch")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmedBranch(Guid id)
{
var branchModel = await _context.Branch.FindAsync(id);
_context.Branch.Remove(branchModel);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Branch));
}
解决方法
只有删除了1行后,您的触发器才会处理。您需要更改触发器代码以使其能够处理多个行删除。像...
CREATE TRIGGER Branch_Delete
ON Branch
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO AuditLog
(
TableName,ModifiedBy,AuditDateTime,ID,AuditAction
)
SELECT
'Branch',SUSER_SNAME(),GETDATE(),BranchID,'Delete'
FROM Deleted;
END;
还要确保表[AuditLog]中[ID]列的数据类型与[Branch]表中[BranchID]的数据类型相匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。