NHibernate: заполнить список незафиксированными данными, связанными только с FK в базе данных
Это уточнение и уточнение этого вопроса.
Предположим, у меня есть две таблицы, Foo
а также Bar
,
Bar
имеет ФК для Foo
,
В приложении таблицы представлены классами и Foo
имеет список Bar
s. Bar
имеет свойство для идентификатора Foo
у него есть ФК в базе данных.
В контексте Session
а также Transaction
с IsolationLevel.ReadUncommitted
Я добавляю экземпляр Foo
в базу данных, назначьте сгенерированный идентификатор Foo_id
свойство экземпляра Bar
а также добавить его в базу данных.
Теперь перед звонком Transaction.Commit()
, можно ли прочитать NHibernate Foo
со списком Bar
из базы данных? То есть читать данные незафиксированными?
Я создал проект VS2012, который демонстрирует это. Он включает в себя проект SSDT для создания необходимой базы данных и тесты, показывающие, о чем я спрашиваю.
Спасибо.
1 ответ
В контексте той же транзакции вы можете прочитать все изменения, которые вы внесли в базу данных, так что да. Уровень изоляции транзакции не имеет значения для изменений, сделанных в этой транзакции.
Однако NHibernate обычно не обновляет уже загруженный объект. Но если вы Flush(), затем либо Clear(), либо Evict(), а затем снова прочитаете Foo, его коллекция будет включать экземпляр Bar. (Пока вы находитесь в одном сеансе, фиксация транзакции не имеет к этому отношения, за исключением того, что с настройками по умолчанию Commit() автоматически вызывает Flush().)