次の方法で共有


ConstraintConflictReason 列挙体

制約の競合が発生する可能性のある理由を表します。

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

構文

'宣言
Public Enumeration ConstraintConflictReason
'使用
Dim instance As ConstraintConflictReason
public enum ConstraintConflictReason
public enum class ConstraintConflictReason
public enum ConstraintConflictReason
public enum ConstraintConflictReason

メンバー

  メンバー名 説明
Collision 項目は、ストア内の別の項目 (既存の項目と同じ名前の項目など) と競合しているため、保存できません。プロバイダーでは、同期先項目の ID を、競合する項目 ID として指定する必要があります。 
Identity 同期元レプリカと同期先レプリカで、項目 ID の扱いが異なります。たとえば、レプリカ X では、id1 および id2 という ID の項目間の衝突競合を解決するために、項目をマージして、マージされた項目に id1 を割り当てます。レプリカ Y では、id1 および id2 という ID の項目間の衝突競合を解決するために、id1 で示される項目の名前を変更して、両方の項目を保持します。レプリカ X は、id1 で示されるマージされた項目と、id2 が id1 にマージされたことを示すマージ廃棄標識を送信します。id1 での競合が検出され、同時実行の競合として解決されます。id2 での競合は、Identity の競合理由を指定することにより検出され、ID の競合として同期アプリケーションに報告されます。このアプリケーションによって、同期元の変更と同期先の変更のどちらを保持して同期を解決するかが決定されます。 
NoParent 項目は、階層構造のデータ ストアに存在しない親項目を必要とするため、そのストアに保存できません。プロバイダーでは、必要に応じて、存在しない親項目の ID を、競合する項目 ID として指定できます。 
Other 項目または変更単位が、同期先レプリカの他の制約に違反しています。プロバイダーでは、必要に応じて、競合する項目の ID を、競合する項目 ID として指定できます。 

解説

同期先プロバイダーでは、変更適用元に制約の競合を報告するときに、ConstraintConflictReason のメンバーを使用して制約の競合の原因を指定します。制約の競合の詳細については、「制約の競合の検出および解決」を参照してください。

次の例では、新しく作成された項目が制約の競合の原因となるかどうかを検出し、競合の原因となる場合は該当する制約の競合の理由を返します。

Public Function CanCreateContact(ByVal itemChange As ItemChange, ByVal changeData As String(), ByRef reason As ConstraintConflictReason, ByRef conflictingItemId As SyncId) As Boolean
    Dim canCreate As Boolean = True

    ' Create a temporary contact and see if its index values conflict with any item already in the contact store.
    Dim newContact As New Contact(changeData)
    canCreate = Not DetectIndexCollision(newContact, conflictingItemId)
    If Not canCreate Then
        ' An index collision occurred, so report a collision conflict.
        reason = ConstraintConflictReason.Collision
    Else
        ' This value won't be used because canCreate is set to true in this case.
        reason = ConstraintConflictReason.Other
    End If

    Return canCreate
End Function
public bool CanCreateContact(ItemChange itemChange, string[] changeData, out ConstraintConflictReason reason, out SyncId conflictingItemId)
{
    bool canCreate = true;

    // Create a temporary contact and see if its index values conflict with any item already in the contact store.
    Contact newContact = new Contact(changeData);
    canCreate = !DetectIndexCollision(newContact, out conflictingItemId);
    if (!canCreate)
    {
        // An index collision occurred, so report a collision conflict.
        reason = ConstraintConflictReason.Collision;
    }
    else
    {
        // This value won't be used because canCreate is set to true in this case.
        reason = ConstraintConflictReason.Other;
    }

    return canCreate;
}

参照

リファレンス

Microsoft.Synchronization 名前空間