Здравствуйте.
Есть набор отношений следующих типов.
Есть множество категорий атрибутов.
В каждой категории множество атрибутов.
У каждого проекта свои значения каждого атрибута
Получился набор классов с такими ключами
public class Project : ModelBase<Project>
{
// Категории аттрибутов
private List<ProjectAttributeCategoryDictionary> projectAttributeCategoryDictionaries;
public List<ProjectAttributeCategoryDictionary> ProjectAttributeCategoryDictionaries
{
get { return projectAttributeCategoryDictionaries; }
set
{
projectAttributeCategoryDictionaries = value;
NotifyPropertyChanged(m => m.ProjectAttributeCategoryDictionaries);
}
}
// Аттрибуты со значениями
private List<Attributes> attributes;
public List<Attributes> Attributes
{
get { return attributes; }
set
{
attributes = value;
NotifyPropertyChanged(m => m.Attributes);
}
}
}
public class ProjectAttributeCategoryDictionary : ModelBase<ProjectAttributeCategoryDictionary>
{
private List<ProjectAttributeDictionary> attributeDictionaries;
public List<ProjectAttributeDictionary> AttributeDictionaries
{
get { return attributeDictionaries; }
set
{
attributeDictionaries = value;
NotifyPropertyChanged(m => m.AttributeDictionaries);
}
}
}
public class ProjectAttributeDictionary : ModelBase<ProjectAttributeDictionary>
{
private List<Attributes> attributes;
public List<Attributes> Attributes
{
get { return attributes; }
set
{
attributes = value;
NotifyPropertyChanged(m => m.Attributes);
}
}
}
public class Attributes : ModelBase<Attributes>
{
public virtual Project Project { get; set; }
public virtual ProjectAttributeDictionary ProjectAttributeDictionary { get; set; }
}
Далее вопрос - почему может не работать следующая выборка
foreach (var cat in db.ProjectAttributeCategoryDictionaries.
Include(x => x.AttributeDictionaries.
Select(t => t.Attributes.
Where(y => y.Project.ProjectId == projectId))))
{
}
Появляется ошибка The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.
Но все то же самое посредством foreach работает прекрасно, но не красиво )
foreach (var cat in db.ProjectAttributeCategoryDictionaries.Include("AttributeDictionaries").Include("AttributeDictionaries.Attributes"))
{
foreach (var ad in cat.AttributeDictionaries.ToArray())
{
foreach (var adAttribute in ad.Attributes.ToArray())
{
if (adAttribute.Project.ProjectId != projectId)
{
ad.Attributes.Remove(adAttribute);
}
}
}
categoryDictionary.Add(cat);
}
интересно разобрать почему EF рубит мой запрос