sql >> Database teknologi >  >> RDS >> Sqlserver

Entity Framework Code Først med SQL Server-synonymer

Hvis jeg har forstået det rigtigt, har du en SharedServer og nogle LocalServers (virksomhedsspecifik), som ønsker at have alle objekterne for begge (en delt, en virksomhedsspecifik) i en enkelt kontekst.

Jeg vil give dig to scenarier:

  1. Mange-til-mange :i dette tilfælde er tabel, der skal have relation, i sharedDB , men den tredje tabel, der forbinder dem, er i virksomhedsspecifik DB .
  2. Single-to-Many :hvilken af ​​tabellerne er i SharedDB og den anden i virksomhedsspecifik DB .

Mange-til-Mange

1. Opret dit synonym i SQL-siden

Først skal du oprette synonymet i din lokale (eller virksomhedsspecifikke) DB:

CREATE SYNONYM [dbo].[StudentCources] FOR [SharedServer].[SharedDB].[dbo].[StudentCources]

lad os antage, at din delte tabel har to kolonner (det er ligeglad) med navnet studentID og courseID .

2. Opret POCO'erne

Lad os antage, at vi har to tabeller på lokal DB, som har mange-til-mange relationer mellem hinanden. og lad os antage, at den tredje joiner-tabel (som indeholder nøglerne) er placeret i delt DB!! (Jeg synes, det er den værste måde). så dine POCO'er vil se sådan ud:

Public Class Student
    Public Property studentID as Integer
    Public Property Name as String
    Public Property Courses as ICollection(Of Course)
End Class

og

Public Class Course
    Public Property courseID as Integer
    Public Property Name as String
    Public Property Students as ICollection(Of Student)
End Class

og Delt en:

Public Class StudentCources
    Public Property courseID as Integer
    Public Property studentID as Integer
End Class

og konteksten ser sådan ud:

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

koden i OnModelCreating fortæller modelbyggeren, at relationstabellen er et synonym (ikke direkte). og vi ved, at synonymet er i SharedDB .

En-til-mange

Ingen trin! Du skal bare ændre OnModelCreating til:

modelBuilder.Entity(Of Student).ToTable("Students", "dbo")

og bemærk, at i dette tilfælde Students er et synonym . så opret forholdet :)




  1. Hvad betyder det at bruge parenteser med en OR i SQL?

  2. Problem med SQLiteOpenHelper på Android 2.X og 3.X

  3. Sådan opdeles en streng i PostgreSQL

  4. SQL Server Index Baglæns Scan:Forståelse, Tuning