Hvis jeg har forstået det rigtigt, har du en SharedServer og nogle LocalServers (virksomhedsspecifik), som ønsker at have alle objekterne for begge (en delt, en virksomhedsspecifik) i en enkelt kontekst.
Jeg vil give dig to scenarier:
- Mange-til-mange :i dette tilfælde er tabel, der skal have relation, i sharedDB , men den tredje tabel, der forbinder dem, er i virksomhedsspecifik DB .
- Single-to-Many :hvilken af tabellerne er i SharedDB og den anden i virksomhedsspecifik DB .
Mange-til-Mange
1. Opret dit synonym i SQL-siden
Først skal du oprette synonymet i din lokale (eller virksomhedsspecifikke) DB:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
lad os antage, at din delte tabel har to kolonner (det er ligeglad) med navnet studentID
og courseID
.
2. Opret POCO'erne
Lad os antage, at vi har to tabeller på lokal DB, som har mange-til-mange relationer mellem hinanden. og lad os antage, at den tredje joiner-tabel (som indeholder nøglerne) er placeret i delt DB!! (Jeg synes, det er den værste måde). så dine POCO'er vil se sådan ud:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
og
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
og Delt en:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
og konteksten ser sådan ud:
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
koden i OnModelCreating
fortæller modelbyggeren, at relationstabellen er et synonym (ikke direkte). og vi ved, at synonymet er i SharedDB .
En-til-mange
Ingen trin! Du skal bare ændre OnModelCreating
til:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
og bemærk, at i dette tilfælde Students
er et synonym . så opret forholdet :)