Отображение кода в первую очередь для иерархии Entity Framework - PullRequest
0 голосов
/ 20 мая 2011

У меня есть модель, которая выглядит так:

public class Category
{
    public string Id { get; set; }
    public string Description { get; set; }
    public Category Parent { get; set; }
    public ICollection<Category> Children { get; set; }
    public ICollection<Product> Products { get; set; }
}

С таблицей базы данных, которая выглядит как

Categories
    Id (PK varchar(5))
    Description (nvarchar(50))
    ParentId (FK varchar(5))

Но я в тупике, когда дело доходит до настройки отображения

modelBuilder.Entity<Category>()
    .HasMany(x => x.Children)
    .WithMany(x => x.Children)
    .Map(m =>
        {
            m.ToTable("Categories");
            m.MapLeftKey(x => x.Id, "Id");
            m.MapRightKey(x => x.Id, "ParentId");
        });

Я понимаю, почему не удается сопоставить (StackOverflowException), но не уверен, как это исправить. Любая помощь будет с благодарностью.

Используется последняя версия EF (4.1?).

Спасибо!

1 Ответ

3 голосов
/ 20 мая 2011

Почему вы отображаете отношение «многие ко многим» в одном и том же свойстве навигации?Это совершенно неправильно.Во-первых, ваша таблица, очевидно, ожидает отношения один ко многим.Даже если вам нужно отношение «многие ко многим», вы не можете использовать для этого одно и то же свойство навигации.

Просто попробуйте:

modelBuilder.Entity<Category>()
            .HasMany(x => x.Children)
            .WithOptional(y => y.Parent)
            .Map(m => m.MapKey("ParentId"));
...