Вы можете session.Save()
или session.SaveOrUpdate()
обновление
Ладно, теперь я понимаю, что вы пытаетесь сделать. Вы пытаетесь обновить одно свойство для Post
, которое ранее сохранялось, а не новое Post
, и для этого вы создаете экземпляр нового Post
и присваиваете ему Id
единицы в базе данных. .
Я не уверен, что вы имеете в виду, когда говорите, что пытаетесь избежать вызова метода, который бы создал объект, но способ сделать это с помощью NHibernate таков:
var post = session.Load<Post>(2);
post.Title = "New Title";
session.SaveOrUpdate(post);
В общем, вы не должны звонить Flush()
на своих сессиях.
Здесь важно отметить использование session.Load
. Вызов Load
с идентификатором сам по себе не загружает объект из базы данных . Значения свойств объекта будут загружены только тогда, когда вы получите к ним доступ.
Конечно, в этом сценарии я считаю, что NHibernate будет загружать свойства для Post
, (но не для коллекций, если вы не указали режим активной выборки), и это имеет смысл ( честно говоря, я не понимаю, почему EF не будет загружать объект). Что если установщик для вашего свойства Title
делает что-то важное, например, сверяет его с существующим заголовком, проверяет длину заголовка, проверяет ваши учетные данные или обновляет другое свойство? Простой отправки ОБНОВЛЕНИЯ в базу данных недостаточно.