RecoverableErrorReportingContext.RecordConstraintError メソッド

項目に変更の適用を試みたときに発生した制約エラーを記録します。変更との間で制約の競合が発生しているローカル項目を記述するために使用します。

名前空間: Microsoft.Synchronization.SimpleProviders
アセンブリ: Microsoft.Synchronization.SimpleProviders (microsoft.synchronization.simpleproviders.dll 内)

構文

'宣言
Public Sub RecordConstraintError ( _
    conflictingItemKey As ItemFieldDictionary _
)
'使用
Dim instance As RecoverableErrorReportingContext
Dim conflictingItemKey As ItemFieldDictionary

instance.RecordConstraintError(conflictingItemKey)
public void RecordConstraintError (
    ItemFieldDictionary conflictingItemKey
)
public:
void RecordConstraintError (
    ItemFieldDictionary^ conflictingItemKey
)
public void RecordConstraintError (
    ItemFieldDictionary conflictingItemKey
)
public function RecordConstraintError (
    conflictingItemKey : ItemFieldDictionary
)

パラメーター

  • conflictingItemKey
    制約エラーが記録される項目のキー。

例外

例外の種類 条件

ChangeDeferredByProviderException

制約が競合した結果、適用されている変更がプロバイダーによって次の同期セッションまで保留されました。

SimpleProviderInvalidOperationException

制約エラーが複数発生したか、無効なオブジェクトで制約エラーが報告されたか、または制約エラーのポリシーによって制約エラーを復旧可能にすることができません。

解説

この変更は、同期セッション内で後から再適用または解決されます。制約の競合の詳細については、「簡易プロバイダーの競合処理」を参照してください。

次のコード例では、メモリ内のサンプル データ ストアに挿入を適用する InsertItem メソッドの実装を示します。挿入を適用できない場合、このメソッドは制約エラーを記録します。完全なアプリケーションのコンテキストでこのコードを表示するには、Sync Framework SDK やCode Galleryから入手できる "Sync101 using Simple Sync Provider" アプリケーションを参照してください。

public override void InsertItem(object itemData, 
    IEnumerable<SyncId> changeUnitsToCreate,
    RecoverableErrorReportingContext recoverableErrorReportingContext, 
    out ItemFieldDictionary keyAndUpdatedVersion, 
    out bool commitKnowledgeAfterThisItem)
{
    ItemTransfer transfer = (ItemTransfer)itemData;
    ItemData dataCopy = new ItemData(transfer.ItemData);

    // Check for duplicates, and record a constraint error if a duplicate is detected.
    if (!_store.Contains(transfer.Id))
    {
        _store.CreateItem(dataCopy, transfer.Id);
        keyAndUpdatedVersion = _store.CreateItemFieldDictionary(transfer.Id);
    }
    else
    {
        recoverableErrorReportingContext.RecordConstraintError(_store.CreateItemFieldDictionary(transfer.Id));
        keyAndUpdatedVersion = null;
    }
    commitKnowledgeAfterThisItem = false;
}
Public Overrides Sub InsertItem(ByVal itemData As Object, ByVal changeUnitsToCreate As IEnumerable(Of SyncId), ByVal recoverableErrorReportingContext As RecoverableErrorReportingContext, ByRef keyAndUpdatedVersion As ItemFieldDictionary, ByRef commitKnowledgeAfterThisItem As Boolean)
    Dim transfer As ItemTransfer = DirectCast(itemData, ItemTransfer)
    Dim dataCopy As New ItemData(transfer.ItemData)

    ' Check for duplicates, and record a constraint error if a duplicate is detected. 
    If Not _store.Contains(transfer.Id) Then
        _store.CreateItem(dataCopy, transfer.Id)
        keyAndUpdatedVersion = _store.CreateItemFieldDictionary(transfer.Id)
    Else
        recoverableErrorReportingContext.RecordConstraintError(_store.CreateItemFieldDictionary(transfer.Id))
        keyAndUpdatedVersion = Nothing
    End If
    commitKnowledgeAfterThisItem = False
End Sub

参照

リファレンス

RecoverableErrorReportingContext クラス
RecoverableErrorReportingContext メンバー
Microsoft.Synchronization.SimpleProviders 名前空間