Pokud jsem správně pochopil, máte Sdílený server a některé místní servery (specifické pro společnost), které chtějí mít všechny objekty obou (jeden sdílený, jeden specifický pro společnost) v jediném kontextu.
Dám vám dva scénáře:
- Mnoho-mnoho :v tomto případě jsou tabulky, které mají mít vztah, ve sharedDB , ale třetí tabulka, která je spojuje, je v DB specifické pro společnost .
- Od jednoho k mnoha :která z tabulek je v SharedDB a druhý v databázi specifické pro společnost .
Mnoho-mnoho
1. Vytvořte si své synonymum na straně SQL
Nejprve musíte vytvořit synonymum ve vaší místní (nebo firemní) DB:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
předpokládejme, že vaše sdílená tabulka má dva sloupce (je to jedno) s názvem studentID
a courseID
.
2. Vytvořte POCO
Předpokládejme, že máme dvě tabulky na lokální DB, které mají mezi sebou vztah Many-to-Many. a předpokládejme, že třetí spojovací tabulka (která obsahuje klíče) je umístěna ve sdílené DB!! (Myslím, že je to nejhorší způsob). takže vaše POCO budou vypadat takto:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
a
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
a Sdílené jeden:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
a kontext vypadá takto:
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
kód v OnModelCreating
říká tvůrci modelu, že relační tabulka je synonymem (ne přímo). a víme, že synonymum je v SharedDB .
Jedna k mnoha
Žádné kroky! Stačí upravit OnModelCreating
komu:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
a všimněte si, že v tomto případě Students
je Synonymum . pak vytvořte vztah :)