1

次のエンティティがあります。

public class Category
{
  public int ID { get; set; }    
  public int? ParentID { get; set; }
  public string Name{ get; set; }
  public virtual Category Parent { get; set; }
}  

私は関係を定義しようとしています: aCategoryはオプションで親カテゴリを持つことができます。
私はすでに主キーを定義しています:

HasKey(m => m.ID);  

1対 0 または 1 のリレーションシップを含むこの例を読みましHasRequiredたが、エンティティがリレーションシップでオプションであることをどのように意味するかを正確に把握できません。

4

2 に答える 2

0

副次的な問題として、まったく同じクラスを EF の親として参照できないことも考えられます。同じ型に異なる属性を持たせるために使用できるのは Projection です。

子参照の HasOptional は、親を持つかどうかを指定するのと同じ効果があります

于 2013-02-03T15:22:27.693 に答える
0

引用した例では、子にはParentId主キーと外部キーの両方がある があります。親と子が異なるエンティティ (および異なるデータベース テーブル) の場合は問題ありませんが、それらが自己参照している場合はそうではありません。Categoryプライマリと外部の両方の ID が必要です。ただし、主キーは一意である必要があるため、文字通り、同じキーを共有する必要がある 1:1 の子の余地はありません。

あなたは何ができますか?唯一のオプションは、関連付けを 1:n としてマップし、n を 1 より大きくできないというビジネス ルールを適用することだと思います。これは EF の制限ではないことに注意してください。自己参照関連を 1:1 に制限するリレーショナル データベース モデルは考えられません。

于 2013-02-03T21:21:21.170 に答える