当我在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。
答案 0 :(得分:2)
您需要将调用该过程的代码放在“submit completed”事件处理程序中。
提交是一个异步操作,如果你在EnableTriggers
之后直接调用SubmitChanges
但在等待时成功就会失败。
使用RIAServices,您可以将callback
传递给SubmitChanges
。一旦提交完成,就会调用此方法。您可以将EnableTriggers
的电话转接到此回调中。
答案 1 :(得分:0)
客户不想花更多时间在这上面并接受按钮上的SubmitChanges()和另一个按钮上的dc.EnableTriggers()。
请随意发表这个问题的真实答案,如果有正确答案,我会将其标记为真正的答案。