Reputation: 182
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; }
}
Upvotes: 1
Views: 1233
Reputation: 16498
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; }
}
Upvotes: 1
Reputation: 1522
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);
}
Upvotes: 0