sql >> Databáze >  >> RDS >> Sqlserver

Entity Framework Code First se synonymy SQL Server

Pokud jsem správně pochopil, máte Sdílený server a některé místní servery (specifické pro společnost), které chtějí mít všechny objekty obou (jeden sdílený, jeden specifický pro společnost) v jediném kontextu.

Dám vám dva scénáře:

  1. Mnoho-mnoho :v tomto případě jsou tabulky, které mají mít vztah, ve sharedDB , ale třetí tabulka, která je spojuje, je v DB specifické pro společnost .
  2. Od jednoho k mnoha :která z tabulek je v SharedDB a druhý v databázi specifické pro společnost .

Mnoho-mnoho

1. Vytvořte si své synonymum na straně SQL

Nejprve musíte vytvořit synonymum ve vaší místní (nebo firemní) DB:

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

předpokládejme, že vaše sdílená tabulka má dva sloupce (je to jedno) s názvem studentID a courseID .

2. Vytvořte POCO

Předpokládejme, že máme dvě tabulky na lokální DB, které mají mezi sebou vztah Many-to-Many. a předpokládejme, že třetí spojovací tabulka (která obsahuje klíče) je umístěna ve sdílené DB!! (Myslím, že je to nejhorší způsob). takže vaše POCO budou vypadat takto:

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

a

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

a Sdílené jeden:

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

a kontext vypadá takto:

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

kód v OnModelCreating říká tvůrci modelu, že relační tabulka je synonymem (ne přímo). a víme, že synonymum je v SharedDB .

Jedna k mnoha

Žádné kroky! Stačí upravit OnModelCreating komu:

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

a všimněte si, že v tomto případě Students je Synonymum . pak vytvořte vztah :)




  1. 2 způsoby, jak získat minuty z hodnoty data a času v databázi Oracle

  2. Klauzule VALUES na serveru SQL Server

  3. Nastavení hodnot sloupců jako názvů sloupců ve výsledku dotazu SQL

  4. Aktivní relace a stav SQL serveru