2012-04-21 19 views
0

EF Code Firstを使用して既存のDB2データベースにマップしています。これは1対多の関係ですが、残念ながら簡単にビューを作成したりスキーマを変更することはできません。EFコード最初の外部キーの問題

親テーブルのスキーマは、次のキーを持っています

Type (char(1)) 
ServiceDate (datetime) 
FormNumber (varchar(8)) 

子テーブル(詳細は)私が作成するために、流暢なマッピングを使用したいのですが、次のキー

ServiceDate (datetime) (also a foreign key to ServiceDate on the parent table) 
FormNumber (varchar(8)) (also a foreign key to ServiceDate on the parent table) 
SpecificServiceDate (datetime) 
LineNumber (varchar(8)) 

を持っています関係。私がしている場合:

.HasMany(e => e.Details).HasForeignKey(e => new {e.ServiceDate, e.FormNumber}); 

...キーが主キーと一致しないというエラーが表示されます。これを設定する方法のアイデアは?ありがとう。

編集

OK、EFは、ネイティブにこの機能をサポートしていません。データを遅延ロードするための回避策はありますか?

これは違いがある場合、これは読み取り専用です。

+1

私はそれがうまくいくかどうかもわかりません。 FormNumber = 1、ServiceDate = 1/1/2013、Type = A、FormNumber = 1、ServiceDate = 1/1/2013、Type = Bの場合はどうなりますか?どのレコードが親レコードであるかを一意に選択する方法はありません。私はDB/2がこの種の外部キー関係を一意に特定しないときに許可するとは思えません。 –

+0

これは古いAS400システムのものではなく、プライマリ・テーブルは実際にはUNIONビューであり、外部キーは何よりもコンベンショナルです。楽しくない。 :-( – bryanjonker

+1

EFでは、ビューも非常にうまくサポートされていません。特に、EFは、複合主キーの一部としてnull不可能なフィールドを扱います。おそらく、ここで関係を作成することはできません。 –

答えて

1

残念ながらそれはできません。 EFの関係は、データベースと同じ規則を持っています。親テーブルの主キーに3つの列がある場合、従属テーブルの外部キーには同じ3つの列が必要です。

私はあなたが一意のキーとしてServiceDateFormNumberをマーキングすることなく、DB2でこのような関係を定義することができるかどうかわからないんだけど(このような場合にもPKでTypeを持ってする理由はありません)が、あなたは間違いなくそれを定義することはできませんSQLサーバーでは、EF用の青いプリントです。とにかくEFは現在のところ、関係を形成する一意のキーをサポートしていません。

関連する問題