2013-03-12 5 views
11

次は、外部キーの関係を定義しようとしている2つの部分テーブルです。プライマリテーブルの名前が変更されたフィールドと非プライマリキーのエンティティリレーションの作成

public class Form 
{ 
    [Key, Column("FormID")] 
    public System.Guid FormGUID { get; set; } 

    [Column("PatGUID")] 
    public Nullable<System.Guid> PatientGUID { get; set; } 
} 

public class Patient 
{ 
    [Column("PatGUID")] 
    public System.Guid PatientGUID { get; set; } 

    [Key, Column("PatID")] 
    public int PatientID { get; set; } 

}

私はこの例等の関連情報、フィールド、ナビゲーションが、すべてを排除してきました。うまくいけばあまりない。

フィールドPatGUIDの患者テーブルへのFKがPatGUIDのテーブルフォームがあります。 Patientテーブルには、PatID int KEYフィールドがあります。

コードの最初のエンティティモデルのフィールドの名前を変更する必要があります。この例の関連フィールドを変更する必要がありますPatGUIDPatientGUIDに変更されています。

私が抱えている困難は、アノテーションまたは流暢のいずれかを使用してこの外部キーを定義しようとしていることです。

だから私は必要な最終的な結果は次のとおりです。

  • プライマリキーテーブル:患者、フィールド:PatGUID(PatientGUID改称)

  • 外部キーテーブル:フォーム、フィールド:PatGUID (PatientGUIDに改名)

これは大きな問題を引き起こすようではないが、Patient.PatGUIDがプライマリキーではなく、フィールドの名前がPatientGUIDに変更されているため、WCFデータサービスが適切な参照を持つ参照を適切に作成できなかった適切な選択/の参加:プリンシパルのキーが主キーが、ユニークキー制約を持ついくつかの他の列ではない場合

SELECT … FROM [dbo].[Form] AS [Extent1] 
INNER JOIN [dbo].[Patient] AS [Extent2] ON [Extent1].[PatGUID] = [Extent2].[PatGUID] 

答えて

14

EFはまだ関係をサポートしていません。 on the feature request listですが、実装されておらず、次のリリース(EF 6)のロードマップにもありません。それがすべて実装されれば(おそらくEF 7では)、生産の準備が整うまで1年以上待つことを期待します。 Patient.PatientIDがないPatient.PatientGUID[Key]、としてマークされているので、あなたの特定のモデルのEFで

は全くFormPatientとの一切の関係を認識しない、とEFはないPatientにFKとして、通常のスカラープロパティとしてForm.PatientGUIDを扱います。

理論上は、をモデル内の[Key]プロパティとして偽装することはできますが、コードファーストモデルからデータベースまたはデータベースからモデルを作成しないと、データベースのプライマリキーではありません。モデルと(既存の)データベースを手動でマップする場合は、しかし、これが他の場所では微妙な問題を引き起こさないかどうかはわかりません。

Patientsと関連するFormsをフェッチする場合は、代わりに手動のjoinステートメントをLINQに書き込んでください。次に、キープロパティだけでなく、任意のプロパティを使用して2つのエンティティを結合することができます。これは、私の意見では、クリーナーであまり「やりにくい」アプローチです。しかし、欠点は、PatientFormの間のナビゲーションプロパティ(参照またはコレクション)がなく、熱心な読み込み(Include)、遅い読み込み、または快適な「点線のパス構文」などの機能を使用できないことです(Form.Patient.SomePatientPropertyなど)。 。)をLINQクエリに追加します。

+3

私は聞きたいとは思っていませんでしたが、なぜこれを動作させることができなかったのかについての決定的な答えと、別の解決方法が必要であることを知っています。 – user2144404

関連する問題