entity-frameworkentity-framework-ctp5

Multi-Level Includes in CodeFirst - EntityFrameWork


It is working code;

IQueryable<Product> productQuery = ctx.Set<Product>().Where(p => p.Id == id).(Include"Contexts.AdditionalProperties.Field");

But you know that it could not produce compile time error if we made mistake in string statement in "Contexts.AdditionalProperties.Field"

I would like to write code below;

IQueryable<Product> productQuery = ctx.Set<Product>().Where(p => p.Id == id).Include(p => p.Contexts);

But above statement could not give chance to define AdditionalProperties and Field.

What should we do?

I would like to write as more than one include for build query.

Thanks.


Solution

  • If AdditionalProperties is a single reference to another object:

    using System.Data.Entity;
    ...
    IQueryable<Product> productQuery = ctx.Set<Product>()
            .Include(p => p.Contexts.AdditionalProperties.Field)
            .Where(p => p.Id == id);
    


    If AdditionalProperties is a collection then you can use the Select method:

    IQueryable<Product> productQuery = ctx.Set<Product>()
            .Include(p => p.Contexts.AdditionalProperties.Select(a => a.Field))
            .Where(p => p.Id == id);
    

    Don't forget to import System.Data.Entity namespace in your class file!