Se ho capito bene, hai un Server condiviso e alcuni LocalServer (company specific) che vogliono avere tutti gli oggetti di entrambi (uno condiviso, uno specifico dell'azienda) in un unico contesto.
Ti propongo due scenari:
- Molti a molti :in questo caso, le tabelle da avere in relazione sono in sharedDB , ma la terza tabella che li unisce si trova nel DB specifico dell'azienda .
- Da singolo a molti :quale delle tabelle si trova in SharedDB e l'altro nel DB specifico dell'azienda .
Molti a molti
1. Crea il tuo sinonimo in lato SQL
Per prima cosa devi creare il sinonimo nel tuo DB locale (o specifico dell'azienda):
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
supponiamo che la tua tabella condivisa abbia due colonne (non importa) denominate studentID
e courseID
.
2. Crea i POCO
Supponiamo di avere due tabelle su DB locale che hanno una relazione Molti-a-Molti tra loro. e supponiamo che la terza tabella di joiner (che contiene le chiavi) si trovi in un DB condiviso!! (Penso che sia il modo peggiore). quindi i tuoi POCO avranno questo aspetto:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
e
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
e il Condiviso uno:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
e il contesto assomiglia a:
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
il codice in OnModelCreating
dice al costruttore del modello che la tabella delle relazioni è un sinonimo (non direttamente). e sappiamo che il sinonimo è in SharedDB .
Uno a molti
Nessun passaggio! Basta modificare il OnModelCreating
a:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
e nota che in questo caso Students
è un sinonimo . quindi crea la relazione :)