2014-06-16 7 views
0

Скажем, у меня есть таблица, которая выглядит примерно так:Entity Framework 6: ассоциирование КОЛЛЕКЦИИ «ребенок»

Person 
{ 
    int Id, 
    string Name, 
    int? ParentId 
} 

В рамках сущности, я могу добавить новое свойство Person Parent и я могу сказать Entity Framework, как это должны быть отображены:

HasOptional(a => a.Parent).WithMany().HasForeignKey(c => c.ParentId); 

Мой вопрос, есть ли способ в этом случае, чтобы добавить это:

ICollection<Person> Children { get; set; } 

Где коллекция будет заполнена всеми Person рядами, имеющими ParentId настоящего времени Person?

ответ

1

Добавьте свойство для ваших детей, как это:

public ICollection<Person> { get; set; } 

Затем настроить отображение так:

HasMany(p => p.Children).WithOptional(p => p.Parent); 

Тогда вы просто должны получить доступ к Children собственности с помощью отложенной загрузки, жадная загрузка (Include(p => p.Children) или явная загрузка.

Если у вас нет свойства навигации, все еще возможно сделать это, но менее очевидно.

MyContext.Person.Where(p => p.ParentId = parentId); 
+0

Пропускаем ли мы что-то, что связывает эту коллекцию с столбцом ParentId? – John

+0

Это сделало: HasMany (p => p.Children) .WithOptional (p => p.Parent) – John

+0

Спасибо за редактирование. Я написал его наизусть и забыл включить лямбду. Во многих случаях навигационное свойство может быть определено с помощью ковентионов, но в этом случае это было невозможно, так как оно не было названо «Лица». – JotaBe

Смежные вопросы