Si entendí bien, tiene un servidor compartido y algunos servidores locales (específico de la empresa) que quieren tener todos los objetos de ambos (uno compartido, uno específico de la empresa) en un solo contexto.
Te daré dos escenarios:
- Muchos a Muchos :en este caso, la tabla para tener relación está en sharedDB , pero la tercera tabla que se une a ellas está en la base de datos específica de la empresa .
- De uno a muchos :cuál de las tablas está en SharedDB y el otro en la base de datos específica de la empresa .
Muchos a Muchos
1. Cree su sinónimo en el lado SQL
Primero debe crear el sinónimo en su base de datos local (o específica de la empresa):
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
supongamos que su tabla compartida tiene dos columnas (no importa) llamadas studentID
y courseID
.
2. Crea los POCO
Supongamos que tenemos dos tablas en la base de datos local que tienen una relación de muchos a muchos entre sí. ¡y supongamos que la tercera tabla de unión (que contiene las claves) se encuentra en la base de datos compartida! (Creo que es la peor manera). por lo que sus POCO se verán así:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
y
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
y el Compartido uno:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
y el contexto parece:
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
el código en OnModelCreating
le dice al generador de modelos que la tabla de relaciones es un sinónimo (no directamente). y sabemos que el sinónimo está en SharedDB .
Uno a muchos
¡Sin pasos! Simplemente modifique el OnModelCreating
a:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
y tenga en cuenta que en este caso Students
es un sinónimo . luego crea la relación :)