2

当我在 a 之后执行存储过程时,存储过程在完成SubmitChanges()之前执行SubmitChanges()

该功能应该从另一台服务器迁移数据(因此有很多插入正在进行)。首先,我调用一个存储过程来禁用给定表上的触发器,然后执行插入操作,然后再次启用触发器。

代码如下所示:

dc.DisableTriggers();    //Stored procedure (works fine)
//... Procedure to insert all the data in the DataContext
dc.MyClass.InsertOnSubmit(myClass);
//...
dc.SubmitChanges();      //All the data is inserted into tables.
dc.EnableTriggers();     //Stored procedure (triggers are enabled before the end of all inserts)).


存储过程:

//DisableTriggers
Disable trigger [triggerName] on tableName;    //Disabling on 5 tables

//EnableTriggers
Enable trigger [triggerName] on tableName;     //same tables as DisableTriggers


如果我在重新启动之前放置一个断点SubmitChanges()并等待一秒钟,那么一切正常。

如果我在 之后设置计时器SubmitChanges(),则在所有插入结束之前启用触发器。

我做了一些测试,如果我绑定SubmitChanges()一个按钮和dc.EnableTriggers()另一个按钮,一切正常。

不幸的是,我需要它全部自动化。

我正在使用 C# .net 4.0。

4

2 回答 2

2

您需要将调用该过程的代码放在“提交完成”事件处理程序中。

提交是一个异步操作,这就是为什么如果您EnableTriggers直接调用它会失败SubmitChanges但如果您等待则成功的原因。

使用 RIAServices,您可以callbackSubmitChanges. 一旦提交完成,就会调用它。你可以把你的电话EnableTriggers放到这个回调中。

于 2012-11-05T15:05:03.317 回答
0

客户不想在此花费更多时间,并接受了按钮上的 SubmitChanges() 和另一个按钮上的 dc.EnableTriggers()。

请随意发布此问题的真实答案,如果有正确的答案,我会将其标记为真实答案。

于 2013-01-08T14:59:11.867 回答