sql >> データベース >  >> RDS >> Sqlserver

SQLServerシノニムを使用した最初のEntityFrameworkコード

    私が正しく理解していれば、あなたは SharedServerを持っています およびいくつかのLocalServers (会社固有)両方のすべてのオブジェクト(1つは共有、もう1つは会社固有)を1つのコンテキストにまとめたい。

    2つのシナリオを紹介します:

    1. 多対多 :この場合、関係を持つテーブルは sharedDBにあります 、ただし、それらを結合する3番目のテーブルは、会社固有のDBにあります。 。
    2. 単一から多数 SharedDBにあるテーブルの1つ もう1つは会社固有のDBにあります 。

    多対多

    1。 SQL側で同義語を作成する

    まず、ローカル(または企業固有)のDBに同義語を作成する必要があります:

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

    共有テーブルにstudentIDという名前の2つの列(関係ありません)があるとします。 およびcourseID

    2。 POCOを作成する

    ローカルDBに、相互に多対多の関係にある2つのテーブルがあるとします。そして、3番目のジョイナーテーブル(キーを含む)が共有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
    

    および共有 1つ:

    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にあることはわかっています 。

    1対多

    ステップはありません! OnModelCreatingを変更するだけです 宛先:

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

    この場合、Students 同義語です 。次に、関係を作成します:)




    1. OracleでPLSQLコードをラップする方法は?

    2. DBテストデータを生成する方法

    3. サブクエリにないSQLselectは結果を返しません

    4. データベース管理、分析、セキュリティに関するRavenDBのOrenEiniへのインタビュー