2017-01-16 7 views
1

現在SQL Serverデータベースを使用しており、Entity Frameworkを使用してASP.Netに接続する必要があります。私は現在データベースに外部キーを持っていませんが、データベースを足場にして、.Include()のようなコマンドでLINQクエリを実行することはできますか?ASP.Netエンティティフレームワークを使用してSQL Serverデータベースをスカフォールドにする方法

現在発生している問題は、データベースモデルに履歴データが格納されているため、複合主キーを持つ複数のテーブルがあるためです。データベースの1対1の関係がなければ、私は.Include()メソッドのような関係に関して何らかのクエリを実行することができません。

次のようにだから私の質問は以下のとおりです。

  1. は、私はそのような.Include()などの機能を使用するために、SQL Serverデータベースの外部キーを含める必要がありますか?

  2. プライマリコンポジットキーとSQL Serverデータベース内の単一のPKとの間にFK関係を含める最も簡単な方法は、複合プライマリキーをSQL Serverデータベースに関連付けるためにテーブルにダミー列を作成することですテーブルの外部キー。ダミー列を作成したり、データを再構築したりする以外にFK関係を作成するには、より良い方法がありますか?以下は

単一の主キーに複合主キーがどのように見えるかの例です:

ID*| CODE* | YEAR* | SEQ*| DATA 
01 | ABCD | 2015 | 01 | 23 
01 | ABCD | 2016 | 01 | 24 
02 | ABCD | 2016 | 01 | 21 


CODE* | DESC 
ABCD | AlphabetSoup 
+0

従属エンティティFKは、主体エンティティPKを指すのに必要です。あなたの例では、コンポジットPKを持つテーブルが従属テーブルなので、 'Table1.CODE'を' Table2とのFKアソシエーションに設定することに問題はありません。コード。関連は多く(表1)から1(表2)になります。 –

答えて

1

テーブルの主キーを=私は含めることがありますかSQL Serverデータベースの外部キー

いいえ、あなたはです。あなたのモデルに関連付けを追加してください。しかし、それはデータベースに外部キーなしで行うのが賢明であるということではありません。できれば、できるだけ早くそれらを追加してください。

次の例のように、流暢なAPIを使って、EFクラスモデルとの関連付けを追加することができます。

modelBuilder.Entity<Main>() 
      .HasRequired(m => m.Code).WithMany() 
      .HasForeignKey(m => m.CODE); 

... Mainは、複合PKを持つテーブルです。

はテーブル

あなたはそれによって何を意味するかわからないダミーの列を作成します。ご覧のように、複合PKの1つのフィールドは、別のテーブル(Codeと表示されます)の PKフィールドへのFKとして完全にうまく機能します。

この場合も、データベースに外部キーを追加して、参照整合性を保ちます。現在、Includeが正しく動作することは保証されていません。MainテーブルのCODEカラムに一致しない値が存在する可能性があるためです。

関連する問題