Nếu tôi hiểu đúng, bạn có SharedServer và một số Máy chủ cục bộ (công ty cụ thể) muốn có tất cả các đối tượng của cả hai (một đối tượng được chia sẻ, một đối tượng cụ thể của công ty) trong một ngữ cảnh duy nhất.
Tôi sẽ cung cấp cho bạn hai tình huống:
- Nhiều đến Nhiều :trong trường hợp này, bảng có quan hệ nằm trong sharedDB , nhưng bảng thứ ba kết hợp với chúng, nằm trong DB cụ thể của công ty .
- Một-nhiều :một trong các bảng nằm trong SharedDB và cái còn lại trong DB cụ thể của công ty .
Nhiều đến Nhiều
1. Tạo từ đồng nghĩa của bạn trong SQL side
Trước tiên, bạn phải tạo từ đồng nghĩa trong DB địa phương của bạn (hoặc công ty cụ thể):
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
giả sử rằng bảng được chia sẻ của bạn có hai cột (không quan tâm) có tên là studentID
và courseID
.
2. Tạo POCOs
Giả sử chúng ta có hai bảng trên DB cục bộ có mối quan hệ Nhiều-Nhiều giữa nhau. và giả sử bảng nối thứ ba (chứa các khóa) nằm trong DB chung !! (Tôi nghĩ đó là cách tồi tệ nhất). vì vậy POCO của bạn sẽ giống như sau:
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
và
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
và Được chia sẻ một:
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
và bối cảnh giống như sau:
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
mã trong OnModelCreating
cho người xây dựng mô hình biết rằng bảng quan hệ là một từ đồng nghĩa (không trực tiếp). và chúng tôi biết rằng từ đồng nghĩa trong SharedDB .
Một-nhiều
Không có bước! Chỉ cần sửa đổi OnModelCreating
tới:
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
và lưu ý rằng trong trường hợp này Students
là một Từ đồng nghĩa . sau đó tạo mối quan hệ :)