Om jag förstod det rätt har du en SharedServer och några LocalServers (företagsspecifikt) som vill ha bådas alla objekt (ett delat, ett företagsspecifikt) i ett enda sammanhang.
Jag ska ge dig två scenarier:
- Många-till-många :i det här fallet finns tabellen som ska ha relation i delad DB , men den tredje tabellen som förenar dem, är i företagsspecifik DB .
- Single-to-Many :vilken av tabellerna finns i SharedDB och den andra i företagsspecifik DB .
Många-till-många
1. Skapa din synonym i SQL-sidan
Först måste du skapa synonymen i din lokala (eller företagsspecifika) DB:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
låt oss anta att din delade tabell har två kolumner (bryr sig inte) med namnet studentID
och courseID
.
2. Skapa POCOs
Låt oss anta att vi har två tabeller på lokal DB som har många-till-många-relationer mellan varandra. och låt oss anta att den tredje sammanfogningstabellen (som innehåller nycklarna) finns i delad DB!! (Jag tycker att det är det värsta sättet). så dina POCOs kommer att se ut så här:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
och
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
och Delad ett:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
och sammanhanget ser ut så här:
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
säger till modellbyggaren att relationstabellen är en synonym (inte direkt). och vi vet att synonymen finns i SharedDB .
En till många
Inga steg! Ändra bara OnModelCreating
till:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
och notera att i det här fallet Students
är en synonym . skapa sedan relationen :)