Wenn ich das richtig verstanden habe, hast du einen SharedServer und einige LocalServers (unternehmensspezifisch), die alle Objekte beider (eines gemeinsam genutzten, eines unternehmensspezifischen) in einem einzigen Kontext haben möchten.
Ich gebe Ihnen zwei Szenarien:
- Many-to-Many :In diesem Fall befindet sich die Tabelle, die eine Beziehung haben soll, in sharedDB , aber die dritte Tabelle, die sich ihnen anschließt, befindet sich in der firmenspezifischen DB .
- Single-to-Many :welche der Tabellen sind in SharedDB und die andere in der firmenspezifischen DB .
Many-to-Many
1. Erstellen Sie Ihr Synonym auf der SQL-Seite
Zuerst müssen Sie das Synonym in Ihrer lokalen (oder firmenspezifischen) DB anlegen:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
Nehmen wir an, Ihre gemeinsam genutzte Tabelle hat zwei Spalten (egal) mit dem Namen studentID
und courseID
.
2. Erstellen Sie die POCOs
Nehmen wir an, wir haben zwei Tabellen in der lokalen Datenbank, die eine Viele-zu-Viele-Beziehung zueinander haben. und nehmen wir an, die dritte Joiner-Tabelle (die die Schlüssel enthält) befindet sich in der gemeinsam genutzten DB !! (Ich denke, es ist der schlechteste Weg). Ihre POCOs sehen also so aus:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
und
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
und die Geteilt eins:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
und der Kontext sieht so aus:
Partial Public Class LocalContext
Inherits DbContext
Public Sub New()
MyBase.New("name=LocalContext")
End Sub
Public Overridable Property Students As DbSet(Of Student)
Public Overridable Property Courses As DbSet(Of Course)
Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder)
modelBuilder.Entity(Of Student).HasMany(Function(e) e.Courses).WithMany(Function(e) e.Students).Map(Sub(e)
e.MapLeftKey("studentID")
e.MapRightKey("courseID")
e.ToTable("StudentCources", "dbo")
End Sub)
End Sub
End Class
den Code im OnModelCreating
teilt dem Modellbauer mit, dass die Beziehungstabelle ein Synonym ist (nicht direkt). und wir wissen, dass sich das Synonym in SharedDB befindet .
Eins-zu-Viele
Keine Schritte! Ändern Sie einfach den OnModelCreating
zu:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
und beachten Sie, dass in diesem Fall Students
ist ein Synonym . dann erstellen Sie die Beziehung :)