sql >> Databasteknik >  >> RDS >> Sqlserver

Entity Framework Code Först med SQL Server-synonymer

Om jag förstod det rätt har du en SharedServer och några LocalServers (företagsspecifikt) som vill ha bådas alla objekt (ett delat, ett företagsspecifikt) i ett enda sammanhang.

Jag ska ge dig två scenarier:

  1. Många-till-många :i det här fallet finns tabellen som ska ha relation i delad DB , men den tredje tabellen som förenar dem, är i företagsspecifik DB .
  2. Single-to-Many :vilken av tabellerna finns i SharedDB och den andra i företagsspecifik DB .

Många-till-många

1. Skapa din synonym i SQL-sidan

Först måste du skapa synonymen i din lokala (eller företagsspecifika) DB:

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

låt oss anta att din delade tabell har två kolumner (bryr sig inte) med namnet studentID och courseID .

2. Skapa POCOs

Låt oss anta att vi har två tabeller på lokal DB som har många-till-många-relationer mellan varandra. och låt oss anta att den tredje sammanfogningstabellen (som innehåller nycklarna) finns i delad DB!! (Jag tycker att det är det värsta sättet). så dina POCOs kommer att se ut så här:

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

och

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

och Delad ett:

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

och sammanhanget ser ut så här:

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 säger till modellbyggaren att relationstabellen är en synonym (inte direkt). och vi vet att synonymen finns i SharedDB .

En till många

Inga steg! Ändra bara OnModelCreating till:

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

och notera att i det här fallet Students är en synonym . skapa sedan relationen :)




  1. Varför ignorerar SQL Server det tomma utrymmet i slutet automatiskt?

  2. Hantering av frödata i R12.2 online patchning

  3. Ersätter mysql_*-funktioner med PDO och förberedda uttalanden

  4. Klusterverifieringsverktyg som genererar ett stort antal xml-filer på filsystemet "/u01".