私が正しく理解していれば、あなたは SharedServerを持っています およびいくつかのLocalServers (会社固有)両方のすべてのオブジェクト(1つは共有、もう1つは会社固有)を1つのコンテキストにまとめたい。
2つのシナリオを紹介します:
- 多対多 :この場合、関係を持つテーブルは sharedDBにあります 、ただし、それらを結合する3番目のテーブルは、会社固有のDBにあります。 。
- 単一から多数 : SharedDBにあるテーブルの1つ もう1つは会社固有のDBにあります 。
多対多
1。 SQL側で同義語を作成する
まず、ローカル(または企業固有)のDBに同義語を作成する必要があります:
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
共有テーブルにstudentID
という名前の2つの列(関係ありません)があるとします。 およびcourseID
。
2。 POCOを作成する
ローカルDBに、相互に多対多の関係にある2つのテーブルがあるとします。そして、3番目のジョイナーテーブル(キーを含む)が共有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
および共有 1つ:
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にあることはわかっています 。
1対多
ステップはありません! OnModelCreating
を変更するだけです 宛先:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
この場合、Students
同義語です 。次に、関係を作成します:)