Итак, у меня есть список дочерних элементов моего родительского объекта, и я хочу сохранить их на своем SQL Server. Когда я запускаю приложение в первый раз, все дочерние элементы получают свой FK правильно, но когда я запускаю его снова и новый родитель не добавляется, новый дочерний элемент (существующего родителя) не получает родительский FK, просто NULL . Как я могу сопоставить родительский FK с моим дочерним сопоставлением для таких ситуаций?
Я пробовал метод Inverse()
, но, поскольку мне нужно, чтобы родительский ключ был сгенерирован, все дочерние элементы все равно становятся нулевыми. Мне нужно что-то вроде, если родитель новый, то родитель обновит свои дочерние FK, но когда только дочерний элемент новый, мне нужно, чтобы он выполнял метод Inverse()
, возможно ли это?
Еще немного информации: каждый раз, когда я вызываю метод ParentPersist, он каскадируется по мере необходимости. Я добавил метод AddChild()
для установки ParentId, когда новый дочерний элемент добавляется в список, он работает так, как я его отлаживал, поэтому дочерний элемент правильно устанавливает свой ParentId.
Объекты выглядят следующим образом:
public class Parent
{
public virtual int Id { get; set; }
...
public virtual IList<Child> Children{ get; set; }
public virtual void AddChild(Child ch)
{
ch.IdParent = this.Id;
Children.Add(ch);
}
}
public class Child
{
public virtual int Id { get; set; }
...
public virtual int IdParent {get;set;}
}
И мое отображение:
public class ParentMapping : ClassMap<Parent>
{
public ParentMapping ()
{
Id(cso => cso.Id).GeneratedBy.Identity();
...
HasMany(cso => cso.Children).KeyColumn("IdParent").Cascade.SaveUpdate().Not.LazyLoad();
}
}
public class ChildMapping : ClassMap<Child>
{
public ChildMapping ()
{
Id(cso => cso.Id).GeneratedBy.Identity();
...
}
}