gpt4 book ai didi

c# - linq to sql SubmitChanges 不使用多个 InsertOnSubmit 或 DeleteOnSubmit 触发触发器

转载 作者:行者123 更新时间:2023-11-30 22:41:56 26 4
gpt4 key购买 nike

我正在使用 linq to sql 并定义了一个触发器,如果​​从带有触发器的表中删除或添加行,则更新另一个表中的计数。如果我调用一个 InsertOnSubmit 或一个 DeleteOnSubmit,然后调用 SubmitChanges,触发器将触发。如果我调用多个 InsertOnSubmit 或 DeleteOnSubmit,然后调用 SubmitChanges,触发器不会触发。

有没有人遇到过这种情况,有没有人知道解决它的方法?现在唯一的解决方法是在每次 InsertOnSubmit 或 DeleteOnSubmit 之后调用 SubmitChanges...

数据库后端是 sql server 2008 standard r2,我使用内置的 linq to sql 设计器功能运行 C# 4.0。

最佳答案

我希望你问这个问题的原因是因为你知道从技术上讲这种行为是不可能的,因为 L2S 生成插入语句就像你手动或在存储过程中一样:)

您确定它没有触发触发器,还是对于所有插入操作只触发一次?我无法对场景进行建模(忘记在我的家用电脑上安装 ssms - 喜欢主要用于游戏;))但是这个问题:SQL Server Trigger that works - fires just once (阅读 pablo santa cruz 的回答)显示触发器只会为每个插入语句触发一次。因此,如果有一个从整个行集中批量插入的插入语句,则触发器只会触发一次,并且触发器中的 inserted 标识符包含所有这些行。

如果 L2S 正在做一些聪明的事情并假脱机从临时表或表变量插入,那么您可能只会看到一个触发器执行。

Console.Out 附加到您的 DataContext 的 Log 属性并检查提交时生成的 SQL - 然后您可以复制它并在 SSMS 中手动执行以检查行为。

顺便说一句,我一生的大部分时间都在避免触发 - 所以我不是他们行为的最大权威 - 我倾向于认为他们除了让我的生活变得血腥痛苦之外什么都不做(虽然知道他们服务于一个非常有用的目的)!

所以,抱歉,没有硬性答案 - 但希望有一些建议。

关于c# - linq to sql SubmitChanges 不使用多个 InsertOnSubmit 或 DeleteOnSubmit 触发触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com