2009-11-11 18 views
6

エンティティフレームワークで2つの非キーフィールドを関連付けるb/tを作成することは可能ですか?エンティティフレームワーク非キーフィールドとの関連付け

例:私はOrderNo場でアソシエーションB/T OrderOrderDetailsを作成したい、(つまり、キー/構造を変更することはできません)レガシーアプリケーションでEntity Frameworkので

Order (
    OrderId : int : PK 
    OrderNo : varchar 
) 

OrderDetails (
    DetailRecordId : int : PK 
    OrderNo : varchar 
) 

を2つのテーブルを取りますこれは、テーブルのいずれかのプライマリキーでも、データベースのFK関係でもありません。

これは私にとっては簡単なことではなく、EFのようなものを使用する理由の1つです。ただし、エンティティキーを使用して関連付けを作成できるようにするだけのようです。

答えて

6

エンティティフレームワークでは、クレームは、列はキーであり、実際にはデータベースに存在しない場合はFK制約が存在することが可能です。

これは、SSDL(EDMXのStorageModel部分)が必要に応じてあなたとデータベースについてlieを操作できるためです。

EFは、キーと外部キーが実際に存在するかのようにデータベースと対話します。

これはうまくいくはずですが、参照整合性に関するすべての通常の警告が適用されます。

は、このことができます私のEntity Framework Tips

希望を参照してください。

+0

+1これは、手動でthge .edmxファイルを編集する必要があることを意味しますか? –

+0

残念ながらはい。 –

+0

もう一度ありがとうございます。最後の1つの質問。 EDMXを編集すると、ウィザードを使用してモデルを更新するときにどのように動作しますか?私のカスタム変更は永続化されますか、または「Edit EDMX」ルートを開始すると、すべての変更を手動で行う必要がありますか? –

1

非キーフィールドを使用してリレーションシップを定義する際の問題は、キーが適切にナビゲート可能であることが保証されていないことです。これにより、関係を満たす複数の行が存在する2つのエンティティ間に1対1の関係がある状況が発生する可能性があります。

...データベースからデータを関連付ける場合、関係は常にキーに基づいている必要があります。キーは参照整合性を強制します。

+3

を作成できるようになります。これが起こらないと私は100%確信しているとしましょう... EFは明らかに良い練習ではないが、私は関係を作ることができますか? –

0

もう一つの回避策:

PKを含め、そこからエンティティを作成しませんビューvOrderを作成します。あるOrderNo

にこのエンティティで セットPK今、あなたは質問は、それはそれをできるようになりますけれどもある関連

関連する問題