2016-08-03 42 views
0

让我处理错误的用户帐户:StaleObjectStateException我在更新让刚创建

Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Domain.Entities.General.Shipping#0]

当用户想在我的应用程序来更新他们的送货地址

控制器

var shippingToAdd = new Shipping 
       { 
        UserId = newUserId, 
        FirstName = model.FirstName, 
        LastName = model.LastName, 
        Address = model.ShippingStreet, 
        SteApt = model.ShippingAptSte, 
        City = model.ShippingCity, 
        State = model.ShippingState, 
        Zip = model.ShippingZip, 
        Country = shippingCountryId, 
       }; 
       UserManagerService.UpdateShipping(shippingToAdd); 

UserManagerService

public static ISession Context { get; set; } 

     public UserManagerService(ISession context) 
     { 
      Context = context; 
     } 

    public static int UpdateShipping(Shipping shipping) 
    { 
     using (ITransaction transaction = Context.BeginTransaction()) 
     { 
      Context.Update(shipping); 
      transaction.Commit(); 
      return 0; //Right Here is where StaleObjectStateException occurs 
     } 
    } 

反正是有解除提交权利之前锁()?或者什么是一般释放锁的最佳方式?

堆栈跟踪

[StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Domain.Entities.General.Shipping#0]]
NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session) +2548
NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session) +533
NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session) +2372
NHibernate.Action.EntityUpdateAction.Execute() +975
NHibernate.Engine.ActionQueue.Execute(IExecutable executable) +63
NHibernate.Engine.ActionQueue.ExecuteActions(IList list) +165
NHibernate.Engine.ActionQueue.ExecuteActions() +68
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) +451
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)

+286 NHibernate.Impl.SessionImpl.Flush() +385 Service.Account.UserManagerService.UpdateShipping(Shipping shipping) in c:\Users\wd\Desktop\master\Service\Account\UserManagerService.cs:189
Controllers.PayPalController.PaymentWithCreditCard(CartViewModel model, IEnumerable 1 cookiecart) in c:\Users\wd\Desktop\master\Controllers\PayPalController.cs:552
Controllers.PayPalController.Continue(CartViewModel model) in c:\Users\wd\Desktop\master\Controllers\PayPalController.cs:136
lambda_method(Closure , ControllerBase , Object[]) +268
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +87
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters) +603
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters) +93
System.Web.Mvc.Async.ActionInvocation.InvokeSynchronousActionMethod() +97 System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +53
System.Web.Mvc.Async.WrappedAsyncResult
2.CallEndDelegate(IAsyncResult asyncResult) +137
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +187
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +136

+1

您尚未在此提供足够的信息。例如,什么是'Context.Update(...)'? – DavidG

+0

对不起,在我的更新中添加了它。 – NeoSketo

+2

还没有足够的信息,这可能是nHibernate?我们不是心灵的! – DavidG

回答

1

我不明白为什么你调用Update(),如果你想添加一个新的对象。你的意思是使用ISession.Save()或ISession.SaveOrUpdate()吗?

+0

你是绝对正确的....我正在传递一个新的实例到更新中。这是问题所在。 – NeoSketo

相关问题