В настоящее время я использую ASP.NET Web Api вместе с NHibernate & Autofac ... У меня возникла проблема, когда мое обновление не привязано к базе данных. Я использую ActionFilterAttribute открывать и закрывать передаст каждый раз, когда действие выполняется следующим образом:Почему обновление моего NHibernate не работает?
private ISessionFactory SessionFactory { get; set; }
public TransactionAttribute()
{
SessionFactory = WebApiApplication.SessionFactory;
}
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var session = SessionFactory.OpenSession();
CurrentSessionContext.Bind(session);
session.BeginTransaction();
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
var session = SessionFactory.GetCurrentSession();
var transcation = session.Transaction;
if (transcation != null && transcation.IsActive)
{
transcation.Commit();
}
session = CurrentSessionContext.Unbind(SessionFactory);
session.Close();
}
Который работает отлично подходит для оного, читать и удалять функции в моем хранилище. К сожалению, кажется, не работает (хотя я пробовал несколько способов) мое обновление:
public bool Update(Client client)
{
var result = Get(client.ClientID);
if (result == null)
{
return false;
}
result.Name = client.Name;
result.Acronym = client.Acronym;
result.Website = client.Website;
return true;
}
Из того, что я читал, если изменение объекта во время операции, нет необходимости вручную вызвать обновление или SaveOrUpdate, поскольку это отслеживается NHibernate &, выполняемым при совершении транзакции.
Почему моя функция обновления не работает должным образом?
Спасибо!
Откуда вызывается обновление? Что такое Get? Больше кода, эти фрагменты бесполезны. – Euphoric
Euphoric, вот мой полный класс репозитория: http://pastebin.com/raw.php?i=bsQFL1fs – slashp
Я бы действительно проверял отладчик, если все сеансы/транзакции одинаковы для курса действия. Там может быть некоторое создание других сеансов/транзакций. Я бы попытался лишить код базового сеанса/get/update/commit и медленно добавить дополнительный код, чтобы проверить, какая часть кода вызывает эту ошибку. – Euphoric