2015-04-06 60 views
2

每當用戶嘗試更改帳單地址的街道地址時,都會發生異常。 Validation Error「一個或多個實體的驗證失敗」更改默認帳單地址'街道地址時出錯

這是堆棧跟蹤:

[DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.] 
    System.Data.Entity.Internal.InternalContext.SaveChanges() +169 
    System.Data.Entity.Internal.LazyInternalContext.SaveChanges() +27 
    VirtoCommerce.Foundation.Data.EFRepositoryBase.SaveChangesInternal() +41 

[DbEntityValidationException: Entity Validation Failed - errors follow: 
VirtoCommerce.Foundation.Customers.Model.Address failed validation 
- Name : Only 128 characters allowed. 
] 
    VirtoCommerce.Foundation.Data.EFRepositoryBase.SaveChangesInternal() +548 
    VirtoCommerce.Foundation.Data.BasicUnitOfWork.SaveChanges() +407 
    VirtoCommerce.Foundation.Data.BasicUnitOfWork.Commit() +10 
    VirtoCommerce.Client.UserClient.SaveCustomerChanges(String memberId) +84 
    VirtoCommerce.Web.Controllers.AccountController.AddressEdit(AddressEditModel model) +1210 
    lambda_method(Closure , ControllerBase , Object[]) +104 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +156 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225 
    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39 
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651188 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

,如果你能在一個乾淨的構建複製這種錯誤,考慮到我沒有改變任何與地址,或者在什麼將幫助任何想法任何想法? 謝謝。

[更新]在更改送貨地址的街道地址時也會發生這種情況。

回答

1

我找到了這個問題的答案。 當更改發貨地址和帳單地址上的地址字段時,由於字符太多,字段將「爆炸」,因此名稱字段將「炸燬」。這會發生,因爲它會保持每次地址變更時加入BillingDefaultShippingDefault到字符串的結尾。

Name Column

爲了解決這個問題,我已經改變了行354:

if (!model.Address.Name.Contains(UserHelper.DefaultBilling)) 
    model.Address.Name += UserHelper.DefaultBilling; 

和線路368:

if (!model.Address.Name.Contains(UserHelper.DefaultShipping)) 
    model.Address.Name += UserHelper.DefaultShipping; 

這解決了問題,希望它會如果你遇到它,也會幫助你。