Ако разбрах правилно, имате SharedServer и някои локални сървъри (специфични за компанията), които искат да имат всички обекти и на двете (един споделен, един специфичен за компанията) в един контекст.
Ще ви дам два сценария:
- Много към много :в този случай таблицата за връзка е в sharedDB , но третата таблица, която ги присъединява, е вфирмена DB .
- Едно към много :коя от таблиците е в SharedDB а другата вфирмена БДа .
Много към много
1. Създайте своя синоним в SQL страна
Първо трябва да създадете синоним във вашата локална (или специфична за фирма) DB:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
да предположим, че вашата споделена таблица има две колони (не се интересува) с име studentID
и courseID
.
2. Създайте POCO
Да предположим, че имаме две таблици в локална DB, които имат връзка много към много помежду си. и нека да предположим, че третата маса за свързване (която съдържа ключовете) се намира в споделена DB!! (Мисля, че това е най-лошият начин). така че вашите POCO ще изглеждат така:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
и
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
и Споделено едно:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
и контекстът изглежда така:
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
кода в OnModelCreating
казва на конструктора на модели, че таблицата на релациите е синоним (не директно). и знаем, че синонимът е в SharedDB .
Едно към много
Без стъпки! Просто променете OnModelCreating
до:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
и имайте предвид, че в този случай Students
е синоним . след това създайте връзката :)