проблема с сессией nhibernate при вызове ajax - PullRequest
0 голосов
/ 28 июля 2011

/ * Обновление * /

Я думал, что были некоторые проблемы с сессией и отложенной загрузкой.Дальнейшее расследование показало, что я создал дублированные элементы заказа (где-то еще в моей кодовой базе).Могу ли я закрыть этот вопрос?

/ * Оригинальный вопрос * /

У меня есть следующее действие.

/ Campaign / MatrixDisplay / 33

это превращает jjery ajax в

/ Campaign / MatrixDisplay / UpdateProduct (json)

UpdateProduct делает несколькообновления базы данных.Если я проверю базу данных, они будут сохранены.Однако если я обновлю главную страницу "/ Campaign / MatrixDisplay / 33", будут возвращены предыдущие значения.

  • Я установил async = false в моем jquery.

Вот мое действие JSON.

[Authorize]
[HttpPost]
public JsonResult UpdateProduct(string changedProducts, int productId, string previousProductTotal, UserSession userSession)
{

           foreach (var orderItem in order.OrderItems)
            {
                if (orderItem.Id == orderItemId)
                {
                    previousQuantity = orderItem.Quantity;
                    orderItem.Quantity = quantity;
                    _orderRepository.Update(order);
                }
            }

        return this.Json(response, JsonRequestBehavior.AllowGet);

}

Вот пример репозитория

    public class OrderRepository : Repository<Order>, IOrderRepository 
    {
        private ISession _session;

        public OrderRepository()
        {
            _session = NHibernateHelper.OpenSession();
        }


     public void Update(Model.Order order)
    {
        using (ITransaction transaction = _session.BeginTransaction())
        {
            _session.SaveOrUpdate(order);
            transaction.Commit();
        }
    }
}

Вот моя фабрика сессий

public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory; 
        public const string SessionKey = "MySession";

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();
                   configuration.AddAssembly(typeof(UserProfile).Assembly);
                    configuration.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName,
                                             "xxxxxx");
                    _sessionFactory = configuration.BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }


        public static ISession OpenSession()
        {
            var context = HttpContext.Current;

            if (context != null && context.Items.Contains(SessionKey))
            {
                //Return already open ISession
                return (ISession)context.Items[SessionKey];
            }
            else
            {
                //Create new ISession and store in HttpContext
                var newSession = SessionFactory.OpenSession();
                if (context != null)
                    context.Items[SessionKey] = newSession;

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