1

次のモデルがあるとしましょう

public class Human
{
    public int HumanId {get;set;}
    public int Gender {get;set;} // 0 = male, 1 = female

    public int? FatherId {get;set;}
    [ForeignKey("FatherId")]
    public virtual Human Father {get;set;}

    public int? MotherId {get;set;}
    [ForeignKey("MotherId")]
    public virtual Human Mother {get;set;}

    public virtual List<Human> Children {get;set;}        
}

わかりました、これは自己参照アプローチです。父/母のマッピングについては、このコードを DbContext クラスに記述して解決策を見つけました

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<Human>()
            .HasOptional(h => h.Father)
            .WithMany()
            .Map(h => h.MapKey("Father"));

        modelBuilder.Entity<Human>()
            .HasOptional(h => h.Mother)
            .WithMany()
            .Map(h => h.MapKey("Mother"));

    }

しかし、条件(性別)に依存するため、私はChildrenプロパティに苦労しています。通常、私はこのようなものを書きます

public virtual List<Human> Children
{
    get
    {
        if (this.Gender == 0)
            return Context.Humans.Where(x => x.FatherId == this.Id).ToList();
        else if (this.Gender == 1)
            return Context.Humans.Where(x => x.MotherId == this.Id).ToList();
        else
            return null;
    }
}

しかし、私の Model クラスでは、コンテキストについてわかりません。

では、これを解決するための最良のアプローチは何ですか? 現在、私は方法を持っています

public List<Human> GetChildren(Human human) { ... }

私のDbContextクラスでは、しかし私は自分のモデルにそれを入れたいと思っています. 可能ですか?

4

1 に答える 1