Question

I am trying to get a one to many relationship using the same type.

e.g.

public class CompanionLinkedCompanion
{
    public int CompanionId { get; set; }

    [ForeignKey("CompanionId")]
    public virtual Companion Companion { get; set; }

    public int LinkedCompanionId { get; set; }

    [ForeignKey("LinkedCompanionId")]
    public virtual Companion LinkedCompanion { get; set; }
}

then

public class Companion
{
    public virtual ICollection<CompanionLinkedCompanion> CompanionLinkedCompanions { get; set; }
}

When I try this the collection on companion for the linked companions isn't populated.

Any help would be appreciated thanks.

Update fixed using @iraj part-solution:

public class CompanionLinkedCompanion : Entity
{
    public int Id { get; set; }

    public int CompanionId { get; set; }

    [ForeignKey("CompanionId")]
    [InverseProperty("CompanionLinkedCompanions")]
    public virtual Companion Companion { get; set; }

    public int LinkedCompanionId { get; set; }

    [ForeignKey("LinkedCompanionId")]
    public virtual Companion LinkedCompanion { get; set; }
}
Was it helpful?

Solution 2

use this :

 public class CompanionLinkedCompanion
{
 public int CompanionId { get; set; }

 [ForeignKey("CompanionId")]
 [InverseProperty("CompanionLinkedCompanions")]
 public virtual Companion Companion { get; set; }

 public int LinkedCompanionId { get; set; }

 [ForeignKey("LinkedCompanionId")]
 [InverseProperty("LinkedCompanions")]
 public virtual Companion LinkedCompanion { get; set; }
}


public class Companion
{
  [InverseProperty("Companion")]
  public virtual ICollection<CompanionLinkedCompanion> CompanionLinkedCompanions { get; set; }

  [InverseProperty("LinkedCompanion")]
  public virtual ICollection<CompanionLinkedCompanion> LinkedCompanions { get; set; }
}

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
       modelBuilder.Entity<CompanionLinkedCompanion>().HasRequired(x => x.Companion).WithMany().HasForeignKey(x => x.CompanionId).willCascadeOnDelete(false);

      modelBuilder.Entity<CompanionLinkedCompanion>().HasRequired(x => x.LinkedCompanion).WithMany().HasForeignKey(x => x.LinkedCompanionId);
  }

OTHER TIPS

For a one to many relationship you want a standard parent/child relationship (which requires only one entity class):

public class Companion
{
    public int CompanionId { get; set; }

    public int? LinkedCompanionId { get; set; }

    [ForeignKey("LinkedCompanionId")]
    // ParentCompanion
    public virtual Companion LinkedCompanion { get; set; }

    [InverseProperty("LinkedCompanion")]
    // ChildrenCompanions
    public virtual ICollection<Companion> CompanionLinkedCompanions { get; set; }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top