Если я вызову Сохранить для нового объекта, а затем заполню его свойства, NHibernate создаст и вставит оператор, который содержит только значения по умолчанию для свойств. Например (сессия является открытой ISession):
var homer = new Person();
session.Save(homer);
homer.Name = "Homer J. Simpson";
session.Flush();
Я думал, что вызов Save сделает гомера постоянным, а NH отследит любые изменения и включит их во вставку. Вместо этого он выдает вставку с параметром свойства name, установленным в null. Если я ставлю вызов Сохранить после назначения, то это работает. Этот объект имеет идентификатор GUID, назначенный NH, поэтому он не выполняет преждевременную вставку для получения идентификатора.
ETA Я использую сеанс на запрос в приложении ASP.NET и шаблон, которому я хочу следовать:
MyObject myObject;
if (id == null)
{
myObject = new MyObject();
repository.Add(myObject);
}
else
{
myObject = repository.GetMyObject(id);
}
// populate myObject's properties
// NH magic happens here when the HTTP request ends