Я наблюдаю странное поведение в Fluent nHibernate. У меня есть два объекта, связанных с этой проблемой: объект «Страница» и объект «Метаданные». К странице может быть прикреплено несколько объектов метаданных, и сопоставление выполняется следующим образом:
'in PageMap
HasMany(Function(x) x.MetaData).Cascade.All()
'in MetaDataMap
References(Function(x) x.Page)
Проблема возникает в процессе сохранения. Когда я хочу сохранить изменения в объекте страницы, я получаю существующий объект страницы, просматриваю список изменений, затем использую Session.Update (Page) для сохранения значений. Странное поведение заключается в том, что данные сохраняются, но метаданные страницы сохраняются дважды: один раз, как и ожидалось, и другой раз с page_id, равным нулю. Что еще более странно, так это то, что это происходит, даже когда я закомментирую команду «Обновить», поэтому на самом деле не обновление приводит к сохранению данных!
Проходя по коду и просматривая данные, я отследил ошибку до точки, где я использую nHibernate, чтобы заставить объект Page использовать его детали. Поэтому, прежде чем я вызову этот метод, база данных вообще не показывает изменений метаданных. После этого я не вижу БД (она занята), но на странице, которая была возвращена, есть какие-либо добавленные метаданные. Метод get выглядит следующим образом:
Public Function GetById(ByVal Id As Integer) As Cms.DataTransferObjects.Page Implements IPageManager.GetById
Dim session As ISession = NHibernateSessionManagerStore.Instance.GetSession()
Dim results As Cms.DataTransferObjects.Page
results = session.CreateCriteria(Of DataTransferObjects.Page)() _
.Add(Expression.Like("Id", Id)) _
.UniqueResult(Of DataTransferObjects.Page)()
Return results
End Function
Так что, очевидно, там нет ничего, что могло бы сохранить данные.
Кто-нибудь может пролить свет на это? Это сводит меня с ума!
Cheers,
Matt