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型号,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参数)+603
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContextcontrollerContext,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(IAsyncResultasyncResult)+137
System.Web.Mvc.Anc.WappedAsyncResultBase`1.End()+187
System.Web.Mvc.Anc.AncResultWrapper.End(IAsyncResult-asyncResult,对象标签)+136

StaleObjectStateException我正在更新刚刚创建的用户帐户

我不明白如果您试图添加一个新对象,为什么要调用Update()。您是想使用ISession.Save()还是ISession.SSaveOrUpdate()?