2

の後に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()、再起動する前に 1 秒待つと、すべて正常に動作します。

の後にタイマーを設定するSubmitChanges()と、すべての挿入が終了する前にトリガーが有効になります。

いくつかのテストを行いSubmitChanges()ましたが、ボタンとdc.EnableTriggers()別のボタンをバインドすると、すべて正常に動作します。

残念ながら、すべて自動化する必要があります。

C# .net 4.0 を使用しています。

4

2 に答える 2

2

プロシージャを呼び出すコードを「送信完了」イベント ハンドラに配置する必要があります。

送信は非同期操作であるため、EnableTriggers直後に呼び出すと失敗しますSubmitChangesが、待機すると成功します。

RIAServices では、callbacktoを渡しますSubmitChanges。これは、送信が完了すると呼び出されます。への呼び出しをEnableTriggersこのコールバックに入れます。

于 2012-11-05T15:05:03.317 に答える
0

顧客はこれ以上の時間を費やすことを望まず、ボタンの SubmitChanges() と別のボタンの dc.EnableTriggers() を受け入れました。

この質問に対する実際の回答を自由に投稿してください。正しい回答があれば、それを本当の回答としてマークします。

于 2013-01-08T14:59:11.867 に答える