Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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_Asp.net Core_Triggers_Ssms - Fatal编程技术网

C# 删除审核表SQL Server数据库的触发器

C# 删除审核表SQL Server数据库的触发器,c#,sql-server,asp.net-core,triggers,ssms,C#,Sql Server,Asp.net Core,Triggers,Ssms,我的sql server使用Mircosoft SSMS,网站使用ASP.NET CORE 下面的查询是我的删除触发器。但是,每当我尝试删除网站中的某些内容时,都会弹出此错误:“InvalidCastException:无法将'System.Guid'类型的对象强制转换为'System.Int32'类型。” 删除触发器: create trigger Branch_Delete on Branch after delete as begin set nocount on; declare @B

我的sql server使用Mircosoft SSMS,网站使用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; }

    }
}

控制器(用于删除功能):

公共异步任务删除分支(Guid?id)
{
if(id==null)
{
返回NotFound();
}
var branchModel=await\u context.Branch
.FirstOrDefaultAsync(m=>m.BranchID==id);
if(branchModel==null)
{
返回NotFound();
}
返回视图(branchModel);
}
//发布:BranchModels/Delete/5
[HttpPost,ActionName(“DeleteBranch”)]
[ValidateAntiForgeryToken]
公共异步任务DeleteConfirmedBranch(Guid id)
{
var branchModel=await_context.Branch.FindAsync(id);
_context.Branch.Remove(branchModel);
wait_context.SaveChangesAsync();
返回重定向操作(分支机构名称);
}

只有删除了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]的数据类型匹配。

只有删除了一行时,触发器才会处理。您需要更改触发器代码,使其能够处理多行删除。类似于

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]的数据类型匹配。

能否确认“var branchModel=await _context.Branch.FirstOrDefaultAsync(m=>m.BranchID==ID);”正在返回branchModel的类型?不确定如何定义分支对象/表,但我的猜测是它被定义为一个int。由于GUID是一个16字节的数值,int只有4,所以它们不兼容(自动)强制转换。您能确认“var branchModel=wait _context.Branch.FirstOrDefaultAsync(m=>m.BranchID==id);”是否返回BranchModel类型?不确定如何定义分支对象/表,但我猜它是定义为int的。由于GUID是一个16字节的数值,int仅为4,因此它们与be(auto)不兼容casted.
AuditLog.ID
也可以是
UNIQUEIDENTIFIER
和任何其他键类型隐式转换为的类型,如
nvarchar(100)
AuditLog.ID
也可以是
UNIQUEIDENTIFIER
和任何其他键类型隐式转换为的类型,如
nvarchar(100)