Профилировщик Nhibernate показывает предупреждение «Использовать явное сохранение или обновление в сеансе» - PullRequest
3 голосов
/ 18 марта 2012

У меня проблема с сохранением в объектах сеанса, созданных в самый первый раз ...

Каждый объект имеет список шагов, а каждый шаг - список значений. (Я использую инверсии на отображениях). Также сущности и шаги ссылаются на основные значения уже в БД. Таким образом, существует некая смесь старых и новых объектов.

Когда я делаю первое сохранение, я делаю Session.Save(entity), и все дерево сохраняется в базе данных.

Проблема заключается в том, что профилировщик предупреждает о таких сообщениях, как

Невозможно определить, является ли StepValueEntity с назначенным идентификатором ede6a5ee-b4bd-4f67-9c64-11ef85b7d6ff временным или отключенным; запрос к базе данных. Чтобы избежать этого, используйте явные Save () или Update () в сеансе.

потому что nhibernate делает много обновлений, прежде чем начать действительно вставлять вещи.

Что я делаю неправильно?

Я пробовал что-то вроде итерации каждого шага, а значение и простота сохраняли его, но происходит то же самое.

Edit:

Вот как я делаю сопоставление для столбцов идентификаторов, возможно, это не дает подсказке nhibernate узнать о новых и уже существующих сущностях, и я должен сделать это по-другому.

Id(x => x.Id).Column("GUID_PIPELINE_STEP_PARAMETER").GeneratedBy.Assigned();

Привет

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Возможно, вы забыли о транзакции, посмотрите: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions

using (var session = sessionFactory.OpenSesion())
using (var tx = session.BeginTransaction())
{
    // perform your insert here
    tx.Commit();
}
0 голосов
/ 22 марта 2012

Для справки: я задал этот же вопрос группе nhusers, и некоторые люди пришли с идеями о том, как сосредоточиться на этой теме.

http://groups.google.com/group/nhusers/browse_thread/thread/bcc962d861c7f111

Наиболее рекомендуемый вариант иодин из них, который я выбрал, заключался в том, чтобы не использовать автоматически сгенерированный идентификатор и использовать один генератор в отображении.Таким образом, NH легко знает, что объект с пустым идентификатором никогда не был вставлен.

Я выбираю генератор гребней Guid, который создает уникальный GUID, который решает проблему фрагментированного индекса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...