Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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# 删除后将数据移动到历史表_C#_Asp.net_Asp.net Mvc_Database_Entity Framework - Fatal编程技术网

C# 删除后将数据移动到历史表

C# 删除后将数据移动到历史表,c#,asp.net,asp.net-mvc,database,entity-framework,C#,Asp.net,Asp.net Mvc,Database,Entity Framework,我想知道为某些表创建历史表并自动将删除的行移动到具有相同列+删除时间的新表的最佳方法是什么 例如: 当我从产品表中删除一行时,它将移动到带有已删除时间列的产品表 谢谢您的时间。最好的选择是在数据库中设置触发器,如下所示: CREATE TRIGGER movetohistorical ON dbo.PRODUCT FOR DELETE AS INSERT Product_H SELECT * FROM dbo.PRODUCT

我想知道为某些表创建历史表并自动将删除的行移动到具有相同列+删除时间的新表的最佳方法是什么

例如: 当我从产品表中删除一行时,它将移动到带有已删除时间列的产品表


谢谢您的时间。

最好的选择是在数据库中设置触发器,如下所示:

    CREATE TRIGGER movetohistorical
        ON dbo.PRODUCT 
        FOR DELETE
    AS

    INSERT Product_H
    SELECT * FROM dbo.PRODUCT 
    WHERE PRODUCT.id IN(SELECT deleted.id FROM deleted)


GO

最简单的方法是在数据库中实现触发器

您可以使用创建触发器

您不必担心应用程序代码中的触发器

触发器应该是删除后的
触发器
触发器,每当删除一行(或多行)时将执行该触发器

您可以阅读这篇文章,它几乎实现了您需要的内容(它实现了一个历史表,但不记录当前日期时间):。事实上,你只需要做一点改变。在示例中,histroy表中的插入使用
SELECT*FROM…
。要执行所需操作,只需添加如下函数:
SELECT*,GETDATE()FROM…
。当然,目标表的末尾必须有这个日期列(如果出现问题,只需指定列名,而不是使用星号)


任何其他选项都意味着要向应用程序中添加代码,并且需要在应用程序和SQL Server之间进行额外的通信。

请共享一些用于删除产品的代码。是的,这是最好的方法,但仅当您希望在SQL Server中执行操作时才适用。如果要在外部服务器(例如应用程序服务器)上记录此操作,这将无法满足您的要求。即使您使用EF删除行,触发器也会触发