3

私は 1 対多の自己参照投稿を何度も読みましたが、特定の順列を見てきました。見逃した場合は、リンクを投稿してください。

これが私のシナリオです。私は2つのテーブルを持っています。フィーチャーにはエピックのコレクションが含まれ、エピックには子エピックのコレクションを再帰的に含めることができます (子、子、子 (n) 個のエピック コレクションを持つことができます)。

以下は、私が作成しようとしているモデルのタイプの簡単な概要です。

public class Feature
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Epic> Epics { get; set; } 
}

public class Epic
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int FeatureId { get; set; }

    public int ParentEpicId { get; set; }
    public virtual ICollection<Epic> ChildEpics { get; set; } 
}

modelBuilder でリレーションシップをほぼ指定できますが、1 つのことに行き詰まります。エピックの最初のコレクションには、親フィーチャーに戻る FeatureId FK と null の ParentEpicId がありますが、これより下のエピック コレクションのすべてのレベルでは、FeatureId が null に設定され、ParentEpicId が親エピックの Id に設定されます。(FeatureId は、エピックの子のツリーの最上位の機能を指すことができますが、これは必須ではありません)

このタイプの関係を最初に EF コードで指定するにはどうすればよいですか?

明確でない場合、またはさらに情報が必要な場合は、お知らせください。

4

1 に答える 1

3

明らかに、両方ともFeatureIdデータベースParentEpicId内の null 許容列にマップされるため、データ モデル内の null 許容プロパティにマップする必要があります。Epicクラスを次のように変更する必要があります。

public class Epic
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int? FeatureId { get; set; }

    public int? ParentEpicId { get; set; }
    public virtual ICollection<Epic> ChildEpics { get; set; } 
}

FeatureId と ParentEpicId のいずれかを設定する必要があるという要件については、EF にすぐに使用できるメカニズムがあるとは思いません。

于 2013-02-13T21:30:33.130 に答える