2010-11-20 16 views
1

同期トランザクション内で一意のインデックスを無効にしてから再構築したいとします。それはできますか?同期フレームワーク - 同期トランザクション内で一意のインデックスを有効または無効にする方法は?

テーブル内に複数の行を変更する必要がありますが、更新される値が一意のインデックスに違反しています。ただし、すべての行が変更された後、制約が満たされるため、同期処理が終了するまでこのインデックスを無効にします。

答えて

1

誰もが同じような問題に対する解決策に興味がある場合 - 1は、同期プロバイダのいくつかのイベントに取り付けることにより、同期中に使用されるトランザクションの制御を取ることができます。

private void DbCacheServerSyncProvider_ApplyingChanges(object sender, ApplyingChangesEventArgs e) 
{ 
    if (e.Transaction == null) 
    { 
    e.Transaction = e.Connection.BeginTransaction(IsolationLevel.ReadCommitted); 

    DisableConstraints(e.Connection, e.Transaction); 
    } 
} 

private void DbCacheServerSyncProvider_ChangesApplied(object sender, ChangesAppliedEventArgs e) 
{ 
    if (e.Transaction != null) 
    { 
    EnableConstraints(e.Connection, e.Transaction); 

    e.Transaction.Commit(); 
    e.Transaction.Dispose(); 
    } 
} 

private void DbCacheServerSyncProvider_ApplyChangeFailed(object sender, ApplyChangeFailedEventArgs e) 
{ 
    if (e.Transaction != null) 
    { 
    e.Transaction.Rollback(); 
    e.Transaction.Dispose(); 
    } 

    throw new InternalException("Server-side conflict has occurred during synchronization. Conflict details:\r\n" + SyncUtils.CreateChangeFailedDetails(e).Trim('\r', '\n')); 
} 
0

ユニークインデックスを変更していない場合は、それを行う必要はありません。

何をしようとする:SQL Server 2008に

、あなたはオンラインの再編成または再構築を行うことができますか?

+0

私は質問を更新しました。 –

関連する問題