StaleObjectStateException我正在更新刚刚创建的用户帐户
本文关键字:用户 创建 StaleObjectStateException 更新 | 更新日期: 2023-09-27 18:00:01
所以我正在处理错误:
行已被另一个事务(或未保存的值)更新或删除映射不正确):[域名.实体.一般.运输#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
}
}
有没有办法在Commit()之前解除锁定?或者,一般来说,解除锁定的最佳方法是什么?
堆叠跟踪
[StaleObjectStateException:行已被另一行更新或删除事务(或未保存的值映射不正确):[域.实体.常规.运输#0]]
NHibernate.Persister.Entity.AbstractEntityPersister.Update(对象id,Object[]字段,Object[]oldFields,Object rowId,Boolean[]includeProperty,Int32 j,Object oldVersion,Object obj,SqlCommandInfo sql,ISessionImplementor会话)+2548
NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(对象id,Object[]字段,Object[]oldFields,Object rowId,Boolean[]includeProperty,Int32 j,Object oldVersion,Object obj,SqlCommandInfo sql,ISessionImplementor会话)+533
NHibernate.Persister.Entity.AbstractEntityPersister.Update(对象id,Object[]字段,Int32[]dirtyFields,Boolean hasDirtyCollection,Object[]oldFields,Object oldVersion,Object obj,Object rowId,ISessionImplementor会话)+2372
NHibernate.Action.EntityUpdateAction.Execute()+975
NHibernate.Engine.ActionQueue.Execute(IExecutable可执行文件)+63
NHibernate.Engine.ActionQueue.ExecuteActions(IList列表)+165
NHibernate.Engine.ActionQueue.ExecuteActions()+68
NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource会话)+451
NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件)+286 NHibernate.Impl.SessionImpl.Flush()+385 Service.Account.UserManagerService.UpdateShipping(运输运输)在里面c: ''Users''wd''Desktop''master''Service''Account''UserManagerService.cs:189
Controllers.PayPalController.PaymentWithCreditCard(CartViewModel型号,IEnumerable1 cookiecart) in c:'Users'wd'Desktop'master'Controllers'PayPalController.cs:552
2参数)+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(ControllerContextcontrollerContext,ActionDescriptor ActionDescriptor,IDictionary2 parameters) +93
2.CallEndDelegate(IAsyncResultasyncResult)+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.Anc.WappedAsyncResultBase`1.End()+187
System.Web.Mvc.Anc.AncResultWrapper.End(IAsyncResult-asyncResult,对象标签)+136
我不明白如果您试图添加一个新对象,为什么要调用Update()。您是想使用ISession.Save()还是ISession.SSaveOrUpdate()?