Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kode Kerangka Entitas Pertama dengan Sinonim SQL Server

Jika saya mengerti dengan benar, Anda memiliki SharedServer dan beberapa Server Lokal (khusus perusahaan) yang ingin memiliki semua objek dari keduanya (satu bersama, satu khusus perusahaan) dalam satu konteks.

Saya akan memberi Anda dua skenario:

  1. Banyak-ke-Banyak :dalam hal ini, tabel yang memiliki relasi berada di sharedDB , tetapi tabel ketiga yang menggabungkannya, ada di DB khusus perusahaan .
  2. Satu-ke-Banyak :tabel mana yang ada di SharedDB dan yang lainnya di DB khusus perusahaan .

Banyak-ke-Banyak

1. Buat Sinonim Anda di sisi SQL

Pertama, Anda harus membuat sinonim di DB lokal (atau khusus perusahaan):

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

misalkan tabel bersama Anda memiliki dua kolom (tidak peduli) bernama studentID dan courseID .

2. Buat POCO

Misalkan kita memiliki dua tabel pada DB lokal yang memiliki hubungan Many-to-Many antara satu sama lain. dan misalkan tabel joiner ketiga (yang berisi kunci) terletak di DB bersama!! (Saya pikir itu cara terburuk). jadi POCO Anda akan terlihat seperti ini:

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

dan

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

dan Dibagikan satu:

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

dan konteksnya terlihat seperti:

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

kode di OnModelCreating memberitahu pembuat model bahwa tabel relasi adalah sinonim (tidak secara langsung). dan kami tahu bahwa sinonimnya ada di SharedDB .

Satu-ke-Banyak

Tidak ada langkah! Cukup ubah OnModelCreating ke:

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

dan perhatikan bahwa dalam hal ini Students adalah Sinonim . lalu buat relasinya :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbaiki Msg 8117 "Operand tipe data varchar tidak valid untuk operator penjumlahan" di SQL Server

  2. Cara Membuat Batasan CHECK di SQL Server (Contoh T-SQL)

  3. Cara Mengubah Ukuran Kolom di SQL Server (T-SQL)

  4. Bagaimana cara mendapatkan id yang terakhir dimasukkan?

  5. Mengapa SQL Server kehilangan satu milidetik?