0

私は次の最終結果を達成しようとしています。私の Person エンティティには追加の値のコレクションが必要であり、この値のコレクションは Person インスタンスごとに異なります。同様に、インスタンスからインスタンスへの追加の値を持つことができる別の Contact エンティティもあります。

したがって、Person、Contact、および Extra の 3 つのテーブルが必要です。Extra には、追加の値を必要とする Person および Contact インスタンスごとに追加の値のセットがあります。Person と Contact に GUID フィールドを与えることで、GUID 値が両方のテーブルで一意になるため、それを結合するフィールドとして使用できます。したがって、定義は次のようになると思います...

Person
  Id - int - Primary Key
  Instance - GUID - Unique Constraint

Contact
  Id - int - Primary Key
  Instance - GUID - Unique Constraint

Extra
  Id - int - Primary Key
  Instance - GUID
  Value - string

しかし、これを Entity Framework にモデル化することはできません。Person エンティティと Contact エンティティに、そのエンティティに関連する Extra 値のセットであるコレクションをそれぞれ持たせたいと考えています。上記のように、一連の列を使用して 3 つのテーブルを作成します。

しかし、関連付けを期待どおりに機能させることはできません.PersonエンティティとContactエンティティの主キーに基づいて、データベースに追加の列を常に追加したいと考えています。これを実際に機能させる方法はありますか?それとも、これはEFでは不可能ですか?

4

3 に答える 3

2

一意のキーをサポートしていないため、これは EF では不可能です。リレーションのプリンシパルとして使用できるのは主キーのみです。

于 2012-06-07T07:45:57.103 に答える
1

すでに回答したように、EFは一意のキーをサポートしていません。ただし、実際にプロパティで何もする必要がない場合は、それが主キーであるIdEFに通知するだけで十分な場合があります。InstanceEFは、それがデータベースレベルの主キーであるかどうかを実際には気にせず、キー自体として使用できるかどうかを知る必要があるだけです。

編集:実際には、それでも機能しません。一意のキーをサポートしていないことに加えExtra.Instanceて、は固定エンティティに対応していません。Extraそれを機能させるには、テーブルをPersonExtraとテーブルに分割する必要がありますContactExtra。EFで表示したいものに対応する外部キー制約をデータベースレベルで追加できるため、これはおそらく良い考えです。

于 2012-06-07T07:57:31.667 に答える
0

これを行うEFの方法は、リンクテーブルを使用することです.2つの列を持つ単純なテーブルで、モデルには直接表示されませんが、コレクションは表示されます。

例えば

Person
  Id - int - Primary Key
  Instance - GUID - Unique Constraint

Contact
  Id - int - Primary Key
  Instance - GUID - Unique Constraint

Extra
  Id - int - Primary Key
  Instance - GUID
  Value - string

PersonExtra
  PersonId  - int
  ExtraId  - int

ContactExtra
  ContactId  - int
  ExtraId  - int

または、モデルで許可されている場合は、主キーを GUID に変更します。

于 2012-06-07T08:06:12.763 に答える