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ć
Tworzenie połączenia do Wydawca za pomocą ServerConnection klasy
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.
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.
If the PartitionGroupsOption property is zestaw to False, zestaw it to True.
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).
Wywołanie Create metoda.
Powtórz kroki 5 i 6 dla każdego artykuł, obejmujące rekord logiczny.
Utworzenie wystąpienie MergeJoinFilter klasy zdefiniować relacje rekord logiczny między artykułami.Następnie zestaw następujące właściwości:
Nazwa podrzędność artykuł w relacji rekord logiczny dla ArticleName właściwość.
Nazwa istniejącego, artykuł nadrzędnej w relacji rekord logiczny dla JoinArticleName właściwość.
Nazwę relacji rekord logiczny dla FilterName właściwość.
Wyrażenie, które definiuje relację dla JoinFilterClause właściwość.
Wartość LogicalRecordLink dla FilterTypes właściwość.Jeśli rekord logiczny relacji jest również filtr łączyć, określ wartość JoinFilterAndLogicalRecordLink dla tej właściwość.Aby uzyskać więcej informacji, zobacz Zmiany do wierszy powiązanych z rekordami logiczne grupowanie.
Wywołanie AddMergeJoinFilter metoda obiektu, który reprezentuje podrzędność artykuł w relacji.Przekazywanie MergeJoinFilter obiekt z kroku 8, aby zdefiniować relację.
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
Zobacz także