我使用EntityFramework BulkInsert扩展将大型数据集插入到数据库中。但是,在表中有一个AFTER INSERT触发器,我要将数据插入到该触发器中,这似乎并不会触发。这是扩展的一个限制,还是有一种方法来确保触发器在操作完成时触发?
发布于 2016-02-02 18:00:23
结果发现我只是找得不够仔细。在文档中没有列出主BulkInsert方法的一些重载,我无法通过任何谷歌搜索找到它们,但是其中一个重载允许标记。其中一个标志是SqlBulkCopyOptions.FireTriggers。
它的用法如下:context.BulkInsert(values, SqlBulkCopyOptions.FireTriggers)。使用此方法,每一行都由触发器单独处理,一切都按其应有的方式工作。
编辑:答案评论
你能解释一下CheckConstraint会做什么吗?
约束是当您添加一些检查时(如10和50之间的值必须是有效的和插入的)。
因此,如果不检查约束,即使超出范围,也会插入5值,而不会出现问题。如果检查约束,将抛出一个错误:
The INSERT statement conflicted with the CHECK constraint "CHK_ColumnWithConstraint". The conflict occurred in database "db_2560", table "dbo.Customers", column 'ColumnWithConstraint'.
The statement has been terminated.下面是一个在线示例:https://dotnetfiddle.net/AMgTYQ
这就是我推荐SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints的原因
如果表中有触发器,那么您可能在什么时候启动它们。如果列具有约束,则如果该值在检查中无效,则可能希望该操作抛出错误。
https://stackoverflow.com/questions/35158447
复制相似问题