让我处理错误的用户帐户: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, IEnumerable1 cookiecart) in c:\Users\wd\Desktop\master\Controllers\PayPalController.cs:552
2 parameters) +603
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
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) +93
2.CallEndDelegate(IAsyncResult asyncResult) +137
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
System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +187
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +136
您尚未在此提供足够的信息。例如,什么是'Context.Update(...)'? – DavidG
对不起,在我的更新中添加了它。 – NeoSketo
还没有足够的信息,这可能是nHibernate?我们不是心灵的! – DavidG