Я создаю модель для структуры верхнего меню сайта -
У меня есть модель MenuObject:
public class MenuObject
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual List<MenuObject> Children { get; set; }
}
и отображение:
public mapMenu()
{
Id(x => x.Id)
.Not.Nullable();
Map(x => x.Title)
.Not.Nullable();
HasMany<MenuObject>(x => x.Children)
.AsList();
}
По сути, я хочу иметь возможность создать элемент меню «Верхний уровень», а затем добавить к нему некоторые дочерние элементы - в терминах базы данных должно быть поле ParentId, содержащее идентификатор родительского элемента меню (если есть - этот может быть нулевым)
Я изо всех сил пытаюсь понять, как это должно быть определено в моей объектной модели. Кроме того, как только я это настрою, как мне спасти детей? Было бы что-то вроде
public void InsertChild(MenuObject parent, MenuObject child)
{
parent.Children.add(child)
session.SAve(parent)
.....
}
или я должен был бы сохранить ребенка независимо и явно связать его с родителем?
Редактировать *****
Спасибо - теперь в моей модели есть следующее:
public virtual MenuObject Parent { get; set; }
public virtual List<MenuObject> Children { get; set; }
и это в отображении:
HasMany(x => x.Children)
.AsList()
.Inverse()
.Cascade.All()
.KeyColumn("ParentId");
References(x => x.Parent, "ParentId");
Теперь я могу добавить детей в родительские элементы следующим образом:
oChild.Parent = oParent;
session.SaveOrUpdate(oParent);
session.Save(oChild);
transaction.Commit();
Я думаю, что я победитель! Это лучший способ сделать это? Спасибо Гдорон