2009-03-12 10 views
6

既存のスキーマに対してEFを使用して評価しています - 問題は、外部キーがプライマリキーではないテーブル間の関連付けを設定する方法を考えることができないことですマスター表のEntity Frameworkの「セカンダリ」キーを処理する方法

例として

fooは次のように定義されている多くのbarsを有していてもよい(擬似コードを許す):

table foo { 
    int foo\_id pk, 
    char(10) foo\_code, 
    ... 
} 

table foobar { 
    int bar\_id pk, 
    char(10) bar\_foo\_code fk(foo.foo\_code), 
    ... 
} 
私は foo_foobar関連付けを作成できるように行方不明です何

、ひいてはBarsナビゲーションプロパティをFooエンティティでは?

+0

ここでも同じ問題があり、最終的にデータベースに変更を加えて、外部キーが主キーのみを指し示すようにしなければなりませんでした。データベーススキーマを変更する方法はありませんか? – CraftyFella

+0

残念ながら、スキーマは従来の理由から悪夢であり、私たちはそれと相互運用する必要があります。サック、私は知っている。 私は、プライマリキーと別の(おそらく合成された)外部キーの両方を持つことがまったく正しいケースを見てきました。 – Rammesses

答えて

3

エンティティへのLinqは、テーブルの主キーを指していない外部キーをサポートしません(ログメッセージ3を参照)。エンティティへのLinqはテーブルの通常のフィールドとして扱います。リンクされているエンティティに移動することはできません。

既存のスキーマをお持ちの場合は、edm generatorを使用することをお勧めします。EMDXファイル、コードビハインド、ビューコード(非常に大きい可能性があります)が作成されるためです。あなたの既存のスキームがかなり大きい場合これをチェックしてください。大きなスキーマを扱う方法についてはpostを参照してください。

EDMジェネレータを実行すると、サポートされていないものがすべて見つかります。以前EDMGen2.exeを見ると

は、私たちが戻って、次のタイプのメッセージを持ってログインします。

  1. データ型「sql_variant型は」
    は、列「ColumnNameに」 テーブル「テーブル名」がサポートされていません が除外されました。
  2. 表/ビュー 'tableName'には、 に主キーが定義されていません。キー が推測されていると定義 は、読み取り専用テーブル/ビュー
  3. 関係「RelationshipName」 が の一部ではない列を持つように作成された関係の 次側のテーブルのキーサポートされていない の場合、 の関係は除外されました。

また、Linqプロジェクトでは、EDMで作成されたコードファイルが80Mbを超えるため、実際にはVisual Studioがかなり壊れていたことがわかりました。

関連する問題