Als ik het goed heb begrepen, heb je een SharedServer en enkele LocalServers (bedrijfsspecifiek) die alle objecten van beide (een gedeeld, een bedrijfsspecifiek) in één context willen hebben.
Ik geef je twee scenario's:
- Veel-op-veel :in dit geval staat de tabel die een relatie moet hebben in sharedDB , maar de derde tabel die zich bij hen voegt, bevindt zich in bedrijfsspecifieke DB .
- Enkel-op-veel :welke van de tabellen bevindt zich in SharedDB en de andere in bedrijfsspecifieke DB .
Veel-op-veel
1. Maak uw synoniem aan de SQL-kant
Eerst moet u het synoniem in uw lokale (of bedrijfsspecifieke) database aanmaken:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
laten we aannemen dat je gedeelde tabel twee kolommen heeft (maakt niet uit) met de naam studentID
en courseID
.
2. Maak de POCO's
Laten we aannemen dat we twee tabellen hebben op lokale DB die een Many-to-Many relatie tussen elkaar hebben. en laten we aannemen dat de derde joiner-tabel (die de sleutels bevat) zich in de gedeelde DB bevindt!! (Ik denk dat dit de slechtste manier is). dus uw POCO's zien er als volgt uit:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
en
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
en de Gedeeld een:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
en de context ziet er als volgt uit:
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
de code in de OnModelCreating
vertelt de modelbouwer dat de relatietabel een synoniem is (niet direct). en we weten dat het synoniem staat in SharedDB .
Een-op-veel
Geen stappen! Wijzig gewoon de OnModelCreating
naar:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
en merk op dat in dit geval Students
is een Synoniem . maak dan de relatie :)