У меня есть следующий класс поко:
public class Category : IDisplayName
{
private ICollection<Category> children;
private Category parent;
public Category()
{
children = new List<Category>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual Category Parent
{
get { return parent; }
set
{
parent = value;
// if (value != null && parent.Children.Contains(this) == false)
// {
// parent.Children.Add(this);
// }
}
}
public virtual ICollection<Category> Children
{
get { return children; }
set { children = value; }
}
}
Это файл сопоставления (я не уверен, что это правильно ... но у меня нет идей, и там есть вся документация ...)
public class CategoryEntityConfiguration : EntityConfiguration<Category>
{
public CategoryEntityConfiguration()
{
Property(x => x.Name).IsRequired();
HasMany(x => x.Children).WithOptional(x => x.Parent);
HasOptional(x => x.Parent).WithMany(x => x.Children);
}
}
Обратите внимание на свойство "Parent" и то, как я не добавляю их каждый из них с помощью коллекции "Children".
var cat_0 = new Category { Name = "Root" };
var cat_1 = new Category { Name = "Property", Parent = cat_0 };
var cat_2 = new Category { Name = "Property Services", Parent = cat_1 };
var cat_3 = new Category { Name = "Housing Association", Parent = cat_2 };
var cat_4 = new Category { Name = "Mortgages & Conveyancing", Parent = cat_2 };
var cat_5 = new Category { Name = "Property Management", Parent = cat_2 };
var cat_6 = new Category { Name = "Property Auctions", Parent = cat_2 };
var cat_7 = new Category { Name = "Landlords Wanted", Parent = cat_2 };
context.Set<Category>().Add(cat_0);
Когда я сохраняю cat_0 в базе данных, вставляется только 1 строка, и Entity Framework не улавливает тот факт, что cat_0 является родителем целого ряда других объектов и не понимает, что их необходимо сохранить. У меня есть обходной путь, который представляет собой закомментированный код в свойстве категории «Родитель» ... но я бы предпочел не делать этого, так как он не выглядит правильным.
Любая помощь будет высоко ценится
Jake