Si j'ai bien compris, vous avez un SharedServer et quelques LocalServers (spécifique à l'entreprise) qui souhaitent avoir tous les objets des deux (l'un partagé, l'autre spécifique à l'entreprise) dans un seul contexte.
Je vais vous proposer deux scénarios :
- Plusieurs à plusieurs :dans ce cas, la table pour avoir la relation est dans sharedDB , mais la troisième table qui les rejoint se trouve dans la base de données spécifique à l'entreprise .
- Unique à plusieurs :laquelle des tables se trouve dans SharedDB et l'autre dans la base de données spécifique à l'entreprise .
Plusieurs à plusieurs
1. Créez votre synonyme côté SQL
Vous devez d'abord créer le synonyme dans votre base de données locale (ou spécifique à l'entreprise) :
CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]
supposons que votre table partagée ait deux colonnes (peu importe) nommées studentID
et courseID
.
2. Créer les POCO
Supposons que nous ayons deux tables sur une base de données locale qui ont une relation plusieurs à plusieurs entre elles. et supposons que la troisième table de jointure (qui contient les clés) se trouve dans la base de données partagée !! (Je pense que c'est la pire façon). vos POCO ressembleront donc à ceci :
Public Class Student
Public Property studentID as Integer
Public Property Name as String
Public Property Courses as ICollection(Of Course)
End Class
et
Public Class Course
Public Property courseID as Integer
Public Property Name as String
Public Property Students as ICollection(Of Student)
End Class
et le Partagé un :
Public Class StudentCources
Public Property courseID as Integer
Public Property studentID as Integer
End Class
et le contexte ressemble à :
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
le code dans le OnModelCreating
indique au constructeur du modèle que la table de relations est un synonyme (pas directement). et nous savons que le synonyme est dans SharedDB .
Un à plusieurs
Pas de marches ! Modifiez simplement le OnModelCreating
à :
modelBuilder.Entity(Of Student).ToTable("Students", "dbo")
et notez que dans ce cas Students
est un synonyme . puis créez la relation :)