#mapping #ef-code-first #entity-relationship #entity-framework-4.1
#сопоставление #ef-code-first #сущность-отношение #entity-framework-4.1
Вопрос:
У меня есть модель, которая выглядит следующим образом:
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:
Почему вы отображаете отношение «многие ко многим» в одном и том же свойстве навигации? Это совершенно неверно. Во-первых, ваша таблица, очевидно, ожидает отношения «один ко многим». Даже если вам нужно отношение «многие ко многим», вы не можете использовать для этого одно и то же свойство навигации.
Просто попробуйте:
modelBuilder.Entity<Category>()
.HasMany(x => x.Children)
.WithOptional(y => y.Parent)
.Map(m => m.MapKey("ParentId"));
Комментарии:
1. Потрясающе. Спасибо. Также нужно не забыть сделать эти свойства виртуальными.