EntityFramework BulkInsert扩展和触发器?

问题描述 投票:0回答:1

我正在使用EntityFramework BulkInsert extension将大型数据集插入数据库。但是,我要在其中插入数据的表上有一个AFTER INSERT触发器,似乎没有触发。这是扩展的限制吗?有没有办法确保操作完成后触发触发器?

c# entity-framework triggers
1个回答
2
投票

事实证明,我看起来不够努力。主要BulkInsert方法有一些重载未在文档中的任何地方列出,我无法通过任何Google搜索找到它们,但是其中一个重载允许标记。标志之一是SqlBulkCopyOptions.FireTriggers

其用法类似于:context.BulkInsert(values, SqlBulkCopyOptions.FireTriggers)。使用此方法,触发器将单独处理每一行,并且一切都会按预期进行。

编辑:答案评论

您能解释一下CheckConstraint的作用吗?

一个约束是当您添加一些检查时,例如该值必须在1050之间才能有效并插入。

因此,如果不检查约束,即使超出范围,也将插入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

如果该表具有触发器,则可能在何时触发它们。如果列具有约束,那么如果该值对于检查无效,则您可能希望操作抛出错误。

© www.soinside.com 2019 - 2024. All rights reserved.