Jeśli dobrze zrozumiałem, masz serwer współdzielony i niektóre serwery lokalne (specyficzne dla firmy), które chcą mieć wszystkie obiekty obu (jeden wspólny, jeden specyficzny dla firmy) w jednym kontekście.
Przedstawię dwa scenariusze:
- Wiele-do-wielu :w tym przypadku tabela do relacji znajduje się w sharedDB , ale trzecia tabela, która do nich dołącza, znajduje się w konkretnej bazie danych firmy .
- Od jednego do wielu :która z tabel znajduje się w SharedDB a drugi w konkretnej bazie danych firmy .
Wiele do wielu
1. Utwórz swój synonim po stronie SQL
Najpierw musisz utworzyć synonim w lokalnej (lub specyficznej dla firmy) bazie danych:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
załóżmy, że twoja wspólna tabela ma dwie kolumny (nieważne) o nazwie studentID
i courseID
.
2. Utwórz POCO
Załóżmy, że mamy dwie tabele w lokalnej bazie danych, które mają między sobą relacje wiele-do-wielu. i załóżmy, że trzecia tabela łączników (która zawiera klucze) znajduje się we współdzielonej bazie danych!! (Myślę, że to najgorszy sposób). więc Twoje POCO będą wyglądać tak:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
i
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
i Udostępnione jeden:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
a kontekst wygląda następująco:
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
kod w OnModelCreating
informuje konstruktora modelu, że tabela relacji jest synonimem (nie bezpośrednio). i wiemy, że synonim znajduje się w SharedDB .
Jeden do wielu
Żadnych kroków! Po prostu zmodyfikuj OnModelCreating
do:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
i zauważ, że w tym przypadku Students
jest synonimem . następnie stwórz relację :)