2017-01-13 9 views
0

DBFirst:エンティティ・フレームワークは、プロパティが別のモデル/テーブルにリンクされていることをどのように確立しますか?次の例では、CustomerIdはCustomerテーブルの主キーです。 edmxファイルをチェックしますか? IDはCustomerテーブルのキーではないことをどのようにして証明しますか?エンティティ・フレームワークは、モデル内のプロパティを外部キーとしてどのように識別しますか? dbFirst

public class Order { 
public int ID { get; set; } 
public int CustomerId { get; set; } // <-- Customer ID 
public Customer Customer { get; set; } // <-- Customer object 
...} 
+0

あなたはDBFirstを指定しました。なぜ、EFはDBスキーマからそのような情報を派生できないはずですか? –

+0

_ "edmxファイルをチェックしていますか?" - はい。 – CodeCaster

答えて

0

この情報は、モデルのedmxファイルXMLにあります。これを見るには、ソリューションエクスプローラでモデルを右クリックし、[開く]をクリックして、XML(テキスト)エディタを選択します。探しているセクションは、下のサンプルコードのように表示されます。

<Association Name="FK_MYFOREIGNKEY"> 
    <End Role="Customer" Type="Self.Customer" Multiplicity="0..1" /> 
    <End Role="Order" Type="Self.Order" Multiplicity="*" /> 
    <ReferentialConstraint> 
     <Principal Role="Customer"> 
     <PropertyRef Name="CustomerId" /> 
     </Principal> 
     <Dependent Role="Order"> 
     <PropertyRef Name="CustomerId" /> 
     </Dependent> 
    </ReferentialConstraint> 
</Association> 
+0

これを確認するために、エンティティフレームワークはパブリックCustomer Customerを見て、次にOrderクラス内の残りのプロパティをチェックして、それらがedmxにあるかどうかを確認します。 名前の中にモデル名を持つプロパティのみをチェックしますか?つまり、顧客モデルのcustomerIdを確認するだけです。 – Benl2

+0

正確ではありません。これらの関係の一部は、モデルのテンプレートファイル、つまりmodel.ttにも含まれています。このファイルの下の階層を展開すると、テーブルと同じ名前のソースファイルのリストが表示されます。 Customerのファイルを開くとOrderプロパティが表示され、Orderを開くとCustomerプロパティが表示されます。どのようにデータベースを構造化しているかによって、多くの関係があるかもしれません。 CustomerIdは複数のテーブルに置くことができます。存在する場合は、これらの関係をここで定義します。 –

関連する問題