SubmitChanges()后紧跟一个存储过程

时间:2012-11-05 13:53:38

标签: .net linq

当我在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。

2 个答案:

答案 0 :(得分:2)

您需要将调用该过程的代码放在“submit completed”事件处理程序中。

提交是一个异步操作,如果你在EnableTriggers之后直接调用SubmitChanges但在等待时成功就会失败。

使用RIAServices,您可以将callback传递给SubmitChanges。一旦提交完成,就会调用此方法。您可以将EnableTriggers的电话转接到此回调中。

答案 1 :(得分:0)

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

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