MrBliz
MrBliz

Reputation: 5898

Eager Loading Many to Many relationship with an Association Entity - Entity Framework

I have a Many to Many relationship with an additional entity to manage the association.

Entities as below:

public class WorkOrderItem : EntityBase
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long WorkOrderItemId { get; set; }

    public virtual ICollection<WorkOrderItemLanguage> WorkOrderItemLanguages { get; set; } 

}

 public class WorkOrderItemLanguage
{

    [Key, Column(Order = 0), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long WorkOrderItemId { get; set; }
    [Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string LanguageId { get; set; }
    [Key, Column(Order = 2), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public LanguageType LanguageType { get; set; }

    public virtual WorkOrderItem WorkOrderItem { get; set; }
    public virtual Language Language { get; set; }
}


public class Language : EntityBase
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string LanguageId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Code { get; set; }
    public string IsoCode { get; set; }
    public int Ordinal { get; set; }

    public virtual ICollection<WorkOrderItemLanguage> WorkOrderItemLanguages { get; set; } 

}

ModelBuilder Configurations

public class WorkOrderItemConfiguration : EntityTypeConfiguration<WorkOrderItem>
{
    public WorkOrderItemConfiguration()
    {
        HasMany(x => x.WorkOrderItemLanguages).WithRequired(x => x.WorkOrderItem).HasForeignKey(x => x.WorkOrderItemId);
    }
}

public class LanguageConfiguration : EntityTypeConfiguration<Language>
{
    public LanguageConfiguration()
    {
        HasMany(x => x.WorkOrderItemLanguages).WithRequired(x => x.Language).HasForeignKey(x => x.LanguageId);
    }
}

if a produce a query to select a WorkOrderItem with all the languages that are related to it, how do i include the Language Entity?

the below query does not load the Language entity

 UnitOfWork.Set<WorkOrderItem>()
            .Include(x => x.WorkOrderItemLanguages.Select(l=>l.Language))
            .FirstOrDefault(x.WorkOrderItemId == id);

Upvotes: 0

Views: 314

Answers (1)

Ashish Rajput
Ashish Rajput

Reputation: 1529

try this

var TesteEntities = UnitOfWork.Set<WorkOrderItem>()
        .Include("WorkOrderItemLanguages.Language")
        .FirstOrDefault(x.WorkOrderItemId == id);

and you will find Language here

Upvotes: 2

Related Questions