Получение данных иерархии в Entity Code-First - PullRequest
0 голосов
/ 04 февраля 2011

У меня есть некоторые иерархические данные.Класс Model, который я использую, выглядит следующим образом:

public class Category
{
    [Key]
    public int CategoryID { get; set; }

    [Required]
    [StringLength(64)]
    public string Name { get; set; }

    public int? ParentCategoryID { get; set; }
    [ForeignKey("ParentCategoryID")]
    public Category ParentCategory { get; set; }

    [Required]
    public int ListOrder { get; set; }


    // left/right
    public int TreeLeft { get; set; }
    public int TreeRight { get; set; }
}   // eo class Category

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

Что я хотел бы сделать, так это добавить коллекцию категорий в этот класс:

public virtual IEnumerable<Category> {get; set; }

Я использовал эту технику в прошлом (изучено из уроков по Mvc), чтобы включать связанные таблицы, когдаполучение данных.Тем не менее, когда я попытался это сделать, я получил ошибку в связи с тем, что IEnumerable <> является абстрактным (что понятно, я думаю, что фреймворк не смог понять, что я хочу сделать) ...

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

Если это невозможно, яПолагаю, я могу составить список вручную, использовать обычный запрос LINQ, чтобы получить все категории в определенной позиции (и их дочерние элементы), и заполнить все вручную.

Мне было интересно, сможет ли LINQ сделать это для меня?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

Если у вас есть собственная ссылка fk, то коллекция должна создаваться автоматически при добавлении таблицы в файл dbml

И будет выглядеть примерно так:

[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Category_Category", Storage="Categories", ThisKey="pkCategoryID", OtherKey="ParentCategoryID")]
public EntitySet<Category> Categories
{
  get
  {
    return this._Categories;
  }
  set
  {
    this._Categories.Assign(value);
  }
}
0 голосов
/ 04 февраля 2011

Не используйте IEnumerable<Category>, но Collection<Category>.Если это ваша проблема ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...