Используйте Session.Load и null, как сказала Кей Херзам.
Вы должны быть уверены, что документ существует для вызова сеанса. Загрузка.Пример:
public bool EditDocTempForBldGrp(int docId, int bldGrpId)
{
try
{
using (ISession session = Document.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
session.Get<HSDocumentTemplate>(docId).HSBuildGroup
= bldGrpId = 0 ? null : session.Load<HSBuildGroup>(bldGrpId);
transaction.Commit();
}
}
}
Таким образом, nhibernate выполнит что-то вроде
select ... from DocumentTemplate where DocId = ..;
UPDATE DocumentTemplate SET .... , BuildGroupId = null where DocumentId = XX;
или
select ... from DocumentTemplate where DocId = ..;
UPDATE DocumentTemplate SET .... , BuildGroupId = YY where DocumentId = XX;
Примечание нет выбора дляBuildGroup для базы данных.
Если вы не уверены в существовании группы сборки, ваш код должен выглядеть следующим образом:
public bool EditDocTempForBldGrp(int docId, int bldGrpId)
{
try
{
using (ISession session = Document.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
session.Get<HSDocumentTemplate>(docId).HSBuildGroup
= session.Get<HSBuildGroup>(bldGrpId);
transaction.Commit();
}
}
}
Таким образом, nhibernate будет выполнять что-то вроде
select ... from DocumentTemplate where DocId = ..;
SELECT .... FROM BuildGroup where buildgroupid = ZZ;
UPDATE DocumentTemplate SET .... , BuildGroupId = null where DocumentId = XX;
Get автоматически возвращает null, если объект не существует.
Наконец, вам не нужно вызывать Session.Update () для повторного присоединения объекта.Все, что связано с сеансом, будет сброшено при фиксации транзакции.