Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Entity Framework Code First z synonimami SQL Server

Jeśli dobrze zrozumiałem, masz serwer współdzielony i niektóre serwery lokalne (specyficzne dla firmy), które chcą mieć wszystkie obiekty obu (jeden wspólny, jeden specyficzny dla firmy) w jednym kontekście.

Przedstawię dwa scenariusze:

  1. Wiele-do-wielu :w tym przypadku tabela do relacji znajduje się w sharedDB , ale trzecia tabela, która do nich dołącza, znajduje się w konkretnej bazie danych firmy .
  2. Od jednego do wielu :która z tabel znajduje się w SharedDB a drugi w konkretnej bazie danych firmy .

Wiele do wielu

1. Utwórz swój synonim po stronie SQL

Najpierw musisz utworzyć synonim w lokalnej (lub specyficznej dla firmy) bazie danych:

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

załóżmy, że twoja wspólna tabela ma dwie kolumny (nieważne) o nazwie studentID i courseID .

2. Utwórz POCO

Załóżmy, że mamy dwie tabele w lokalnej bazie danych, które mają między sobą relacje wiele-do-wielu. i załóżmy, że trzecia tabela łączników (która zawiera klucze) znajduje się we współdzielonej bazie danych!! (Myślę, że to najgorszy sposób). więc Twoje POCO będą wyglądać tak:

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

i

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

i Udostępnione jeden:

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

a kontekst wygląda następująco:

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

kod w OnModelCreating informuje konstruktora modelu, że tabela relacji jest synonimem (nie bezpośrednio). i wiemy, że synonim znajduje się w SharedDB .

Jeden do wielu

Żadnych kroków! Po prostu zmodyfikuj OnModelCreating do:

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

i zauważ, że w tym przypadku Students jest synonimem . następnie stwórz relację :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie problemu z błędnym odczytem w programie SQL Server

  2. Jak znaleźć ostatni dzień miesiąca w SQL Server

  3. Nie używaj sp_depends w SQL Server (jest przestarzałe)

  4. Architektura programu SQL Server AlwaysOn (grupa dostępności) i instalacja krok po kroku -2

  5. Użyć liczby zmiennoprzecinkowej lub dziesiętnej dla kwoty w dolarach w aplikacji księgowej?