Многоуровневая Включает в CodeFirst - EntityFrameWork - PullRequest
24 голосов
/ 20 января 2011

Это рабочий код;

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

Но вы знаете, что это не могло привести к ошибке времени компиляции, если мы допустили ошибку в строковом выражении в "Contexts.AdditionalProperties.Field"

Iхотел бы написать код ниже;

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

Но приведенное выше утверждение не может дать шанс определить AdditionalProperties и Field.

Что нам делать?

Я бы хотелнаписать как несколько включений для запроса сборки.

Спасибо.

1 Ответ

42 голосов
/ 20 января 2011

Если AdditionalProperties является единственной ссылкой на другой объект:

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


Если AdditionalProperties является коллекцией, вы можете использовать Выберите метод:

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

Не забудьте импортировать System.Data.Entity пространство имен в вашем файле класса!

...