У меня есть идентифицирующая связь между двумя таблицами в базе данных.
Родительская таблица имеет первичный ключ, который создается с помощью Identity. Дочерняя таблица имеет первичный ключ, который является первичным ключом, созданным для идентификации из родительской таблицы. Это настоящий один на один.
Я пробовал несколько картографических стратегий со всеми видами результатов, но ни одна из них не была идеальной.
Файл родительского сопоставления имеет это (обратите внимание на Cascade.All () - я ожидаю, что родительский узел будет управлять отношениями):
HasOne(x => x.ChildObject).Cascade.All();
Дочернее отображение имеет это:
Id(Reveal.Member<ChildObject>("ID"))
.GeneratedBy.Foreign("ParentObject");
HasOne(Reveal.Member<ChildObject, ParentObject>("ParentObject"))
.Constrained()
.ForeignKey();
Я изменил имена объектов, чтобы защитить невинных.
Так вот что происходит. Я создаю экземпляр родительского элемента, создаю экземпляр дочернего элемента и устанавливаю отношения (добавьте дочерний элемент к родительскому элементу и родительский элемент к дочернему элементу).
Я запускаю этот код:
session.SaveOrUpdate(_Parent);
session.Clear();
transaction.Commit();
Что я ожидаю, так это то, что родительский объект будет сохранен с обновленным идентификатором в родительском элементе из базы данных. Затем идентификатор должен быть установлен в Child, а Child сохранен.
Вместо этого родительский объект сохраняется, но не дочерний (я вижу операторы вставки, которые выполняет nHibernate, и дочерний объект никогда не появляется в базе данных).
У Child есть идентификатор от родителя (он распространяется от Parent к Child правильно), но nHibernate не распознает Child как грязного (предположение с моей стороны). Даже если я явно попробую SaveOrUpdate для объекта Child, он не будет сохранен.
Но это становится немного страннее. Если я присоединяю коллекцию грязных объектов к дочернему объекту и вызываю SaveOrUpdate явно для дочернего объекта, nHhiberante сохраняет этот дочерний объект, а коллекция - ожидаемое поведение. Но я все еще должен назвать это явно.
Какую ошибку я совершил, сопоставляя отношения Родитель-Ребенок?