Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Entity Framework Code Първо със синоними на SQL Server

Ако разбрах правилно, имате SharedServer и някои локални сървъри (специфични за компанията), които искат да имат всички обекти и на двете (един споделен, един специфичен за компанията) в един контекст.

Ще ви дам два сценария:

  1. Много към много :в този случай таблицата за връзка е в sharedDB , но третата таблица, която ги присъединява, е вфирмена DB .
  2. Едно към много :коя от таблиците е в SharedDB а другата вфирмена БДа .

Много към много

1. Създайте своя синоним в SQL страна

Първо трябва да създадете синоним във вашата локална (или специфична за фирма) DB:

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

да предположим, че вашата споделена таблица има две колони (не се интересува) с име studentID и courseID .

2. Създайте POCO

Да предположим, че имаме две таблици в локална DB, които имат връзка много към много помежду си. и нека да предположим, че третата маса за свързване (която съдържа ключовете) се намира в споделена DB!! (Мисля, че това е най-лошият начин). така че вашите POCO ще изглеждат така:

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

и

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

и Споделено едно:

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

и контекстът изглежда така:

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

кода в OnModelCreating казва на конструктора на модели, че таблицата на релациите е синоним (не директно). и знаем, че синонимът е в SharedDB .

Едно към много

Без стъпки! Просто променете OnModelCreating до:

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

и имайте предвид, че в този случай Students е синоним . след това създайте връзката :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Профилиране на заявка 101 — Да, наистина може да подобри производителността на вашия SQL сървър

  2. SQL Server :Колони към редове

  3. Грешка на SQL Server при команда за актуализиране - Възникна сериозна грешка при текущата команда

  4. Начин за извличане от стойност на DateTime без секунди

  5. SQL Server:АКТУАЛИЗИРАНЕ на таблица с помощта на ORDER BY