Jika saya mengerti dengan benar, Anda memiliki SharedServer dan beberapa Server Lokal (khusus perusahaan) yang ingin memiliki semua objek dari keduanya (satu bersama, satu khusus perusahaan) dalam satu konteks.
Saya akan memberi Anda dua skenario:
- Banyak-ke-Banyak :dalam hal ini, tabel yang memiliki relasi berada di sharedDB , tetapi tabel ketiga yang menggabungkannya, ada di DB khusus perusahaan .
- Satu-ke-Banyak :tabel mana yang ada di SharedDB dan yang lainnya di DB khusus perusahaan .
Banyak-ke-Banyak
1. Buat Sinonim Anda di sisi SQL
Pertama, Anda harus membuat sinonim di DB lokal (atau khusus perusahaan):
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
misalkan tabel bersama Anda memiliki dua kolom (tidak peduli) bernama studentID
dan courseID
.
2. Buat POCO
Misalkan kita memiliki dua tabel pada DB lokal yang memiliki hubungan Many-to-Many antara satu sama lain. dan misalkan tabel joiner ketiga (yang berisi kunci) terletak di DB bersama!! (Saya pikir itu cara terburuk). jadi POCO Anda akan terlihat seperti ini:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
dan
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
dan Dibagikan satu:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
dan konteksnya terlihat seperti:
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
kode di OnModelCreating
memberitahu pembuat model bahwa tabel relasi adalah sinonim (tidak secara langsung). dan kami tahu bahwa sinonimnya ada di SharedDB .
Satu-ke-Banyak
Tidak ada langkah! Cukup ubah OnModelCreating
ke:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
dan perhatikan bahwa dalam hal ini Students
adalah Sinonim . lalu buat relasinya :)