Udostępnij za pośrednictwem


Jak Zdefiniuj relację rekordu logiczne między artykuły tabeli korespondencji seryjnej (Programowanie RMO)

Ostrzeżenie

Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.

Replikacja scalania pozwala zdefiniować relację między powiązane wiersze w różnych tabelach.Wiersze te można następnie przetwarzane jako jednostkę transakcyjną podczas synchronizacji.rekord logiczny mogą być definiowane między dwóch artykułach, czy mają one filtr łączyć relacji.Aby uzyskać więcej informacji, zobacz Zmiany do wierszy powiązanych z rekordami logiczne grupowanie.

Można programowo określić rekord logiczny relacji między artykułami przy użyciu obiektów zarządzania replikacji (RMO).

Ostrzeżenie

replikacja scalania umożliwia określenie śledzone konfliktów i rozwiązywane w rekord logiczny poziom, ale tych opcji nie zestaw, używając RMO.Informacje o ustawianiu tych opcji za pomocą procedur przechowywanych replikacja, zobacz Jak Zdefiniuj relację rekordu logiczne między artykuły tabeli korespondencji seryjnej (Programowanie replikacji Transact-SQL).

Aby zdefiniować rekord logiczny relacji bez filtru skojarzone łączyć

  1. Tworzenie połączenia do Wydawca za pomocą ServerConnection klasy

  2. Utworzenie wystąpienie MergePublication klasy, ustaw Name i DatabaseName właściwość publikacja i zestaw ConnectionContext właściwość połączenia, utworzony w kroku 1.

  3. Wywołanie LoadProperties metoda, aby pobrać właściwości obiektu.Jeśli ta metoda zwraca false, publikacja nie istnieje albo niepoprawnie zostały zdefiniowane właściwości publikacji w kroku 2.

  4. If the PartitionGroupsOption property is zestaw to False, zestaw it to True.

  5. Jeśli artykuły, które obejmują rekord logiczny nie istnieje, należy utworzyć wystąpienie MergeArticle klasy, a zestaw następujące właściwości:

    • Nazwę artykuł dla Name.

    • Nazwa publikacja dla PublicationName.

    • (Opcjonalnie) Artykuł poziomo jest filtrowana, określić klauzula filtr wiersza dla FilterClause właściwość.właściwość tej można użyć, aby określić statyczny lub sparametryzowany filtr wierszy.Aby uzyskać więcej informacji, zobacz Filtry parametrami wiersza.

    Aby uzyskać więcej informacji, zobacz Jak Definiowanie artykuł (Programowanie RMO).

  6. Wywołanie Create metoda.

  7. Powtórz kroki 5 i 6 dla każdego artykuł, obejmujące rekord logiczny.

  8. Utworzenie wystąpienie MergeJoinFilter klasy zdefiniować relacje rekord logiczny między artykułami.Następnie zestaw następujące właściwości:

  9. Wywołanie AddMergeJoinFilter metoda obiektu, który reprezentuje podrzędność artykuł w relacji.Przekazywanie MergeJoinFilter obiekt z kroku 8, aby zdefiniować relację.

  10. Powtórz kroki 8 i 9 dla każdej pozostałej relacji rekord logiczny w publikacja.

Przykład

W tym przykładzie tworzony rekord logiczny, obejmujący dwa nowe artykuły dla SalesOrderHeader i SalesOrderDetail tabele.

// Define the Publisher and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2008R2";

// Specify article names.
string articleName1 = "SalesOrderHeader";
string articleName2 = "SalesOrderDetail";

// Specify logical record information.
string lrName = "SalesOrderHeader_SalesOrderDetail";
string lrClause = "[SalesOrderHeader].[SalesOrderID] = "
    + "[SalesOrderDetail].[SalesOrderID]";

string schema = "Sales";

MergeArticle article1 = new MergeArticle();
MergeArticle article2 = new MergeArticle();
MergeJoinFilter lr = new MergeJoinFilter();
MergePublication publication = new MergePublication();

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Verify that the publication uses precomputed partitions.
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;
    publication.ConnectionContext = conn;

    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // If precomputed partitions is disabled, enable it.
        if (publication.PartitionGroupsOption == PartitionGroupsOption.False)
        {
            publication.PartitionGroupsOption = PartitionGroupsOption.True;
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }

    // Set the required properties for the PurchaseOrderHeader article.
    article1.ConnectionContext = conn;
    article1.Name = articleName1;
    article1.DatabaseName = publicationDbName;
    article1.SourceObjectName = articleName1;
    article1.SourceObjectOwner = schema;
    article1.PublicationName = publicationName;
    article1.Type = ArticleOptions.TableBased;

    // Set the required properties for the SalesOrderDetail article.
    article2.ConnectionContext = conn;
    article2.Name = articleName2;
    article2.DatabaseName = publicationDbName;
    article2.SourceObjectName = articleName2;
    article2.SourceObjectOwner = schema;
    article2.PublicationName = publicationName;
    article2.Type = ArticleOptions.TableBased;

    if (!article1.IsExistingObject) article1.Create();
    if (!article2.IsExistingObject) article2.Create();

    // Define a logical record relationship between 
    // PurchaseOrderHeader and PurchaseOrderDetail. 

    // Parent article.
    lr.JoinArticleName = articleName1;

    // Child article.
    lr.ArticleName = articleName2;
    lr.FilterName = lrName;
    lr.JoinUniqueKey = true;
    lr.FilterTypes = FilterTypes.LogicalRecordLink;
    lr.JoinFilterClause = lrClause;

    // Add the logical record definition to the parent article.
    article1.AddMergeJoinFilter(lr);
}
catch (Exception ex)
{
    // Do error handling here and rollback the transaction.
    throw new ApplicationException(
        "The filtered articles could not be created", ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2008R2"

' Specify article names.
Dim articleName1 As String = "SalesOrderHeader"
Dim articleName2 As String = "SalesOrderDetail"

' Specify logical record information.
Dim lrName As String = "SalesOrderHeader_SalesOrderDetail"
Dim lrClause As String = "[SalesOrderHeader].[SalesOrderID] = " _
        & "[SalesOrderDetail].[SalesOrderID]"

Dim schema As String = "Sales"

Dim article1 As MergeArticle = New MergeArticle()
Dim article2 As MergeArticle = New MergeArticle()
Dim lr As MergeJoinFilter = New MergeJoinFilter()
Dim publication As MergePublication = New MergePublication()

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Verify that the publication uses precomputed partitions.
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' If precomputed partitions is disabled, enable it.
        If publication.PartitionGroupsOption = PartitionGroupsOption.False Then
            publication.PartitionGroupsOption = PartitionGroupsOption.True
        End If
    Else
        Throw New ApplicationException(String.Format( _
            "Settings could not be retrieved for the publication. " _
            & "Ensure that the publication {0} exists on {1}.", _
            publicationName, publisherName))
    End If

    ' Set the required properties for the SalesOrderHeader article.
    article1.ConnectionContext = conn
    article1.Name = articleName1
    article1.DatabaseName = publicationDbName
    article1.SourceObjectName = articleName1
    article1.SourceObjectOwner = schema
    article1.PublicationName = publicationName
    article1.Type = ArticleOptions.TableBased

    ' Set the required properties for the SalesOrderDetail article.
    article2.ConnectionContext = conn
    article2.Name = articleName2
    article2.DatabaseName = publicationDbName
    article2.SourceObjectName = articleName2
    article2.SourceObjectOwner = schema
    article2.PublicationName = publicationName
    article2.Type = ArticleOptions.TableBased

    If Not article1.IsExistingObject Then
        article1.Create()
    End If
    If Not article2.IsExistingObject Then
        article2.Create()
    End If

    ' Define a logical record relationship between 
    ' SalesOrderHeader and SalesOrderDetail. 

    ' Parent article.
    lr.JoinArticleName = articleName1
    ' Child article.
    lr.ArticleName = articleName2
    lr.FilterName = lrName
    lr.JoinUniqueKey = True
    lr.FilterTypes = FilterTypes.LogicalRecordLink
    lr.JoinFilterClause = lrClause

    ' Add the logical record definition to the parent article.
    article1.AddMergeJoinFilter(lr)
Catch ex As Exception
    ' Do error handling here and rollback the transaction.
    Throw New ApplicationException( _
            "The filtered articles could not be created", ex)
Finally
    conn.Disconnect()
End Try