Как сделать выбор в поле внешнего ключа, допускающего обнуляемость, в Entity Framework? - PullRequest
0 голосов
/ 25 февраля 2009

У меня есть таблица категорий, которая имеет внешний ключ для себя через обнуляемое поле parentId. В Entity-Framework при создании отношения объект создается без каких-либо полей отношения. Я имею в виду, что в моем примере, когда я создал отношение parentId-Id в таблице категорий, сгенерированный объект категории будет иметь свойство Id с типом int и свойство ParentCategory с типом Category, а свойство ParentId отсутствует. И это делает мои запросы сложнее.

Итак, у меня возникает проблема, когда я хочу выбрать подкатегории категории. Я использую метод ниже для этого;

public IEnumerable<ICategory> GetSubCategories(long? categoryId)
{
    var subCategories = this.Repository.Category.Where(c => c.ParentCategory.Id == categoryId)
                .ToList().Cast<ICategory>();

    return subCategories;
}

Но это не работает, когда я хочу выбрать корневые категории. Как это сделать?

Кстати, мне интересно, есть ли способ генерировать сущности, такие как в Linq to Sql, со свойством int с типизированным Id, типом int с типом ParentId и свойством Type с типом ParentCategory.

1 Ответ

1 голос
/ 25 февраля 2009

Чтобы выбрать корневые категории:

var rootCategories = this.Repository.Category.Where(c => c.ParentCategory == null).ToList().Cast<ICategory>();

Чтобы обобщить код для работы с подкаталогами и корневыми категориями:

var rootCategories = this.Repository.Category.Where(c => categoryId == null ? c.ParentCategory == null : c => c.ParentCategory.Id == categoryId).ToList().Cast<ICategory>();
...