Try our conversational search powered by Generative AI!

Problem with SerializableIdGenerator if OrderFormId is 0

Found in

EPiServer.Commerce 10.7.1

Fixed in

EPiServer.Commerce 10.7.2

(Or a related package)

Created

Jun 07, 2017

Updated

Oct 19, 2018

Area

Core

State

Closed, Fixed and tested


Description

If you upgrade to 10.7.1, serializable cart mode is enabled, and there are some existing carts, the site breaks and throws the following exception

2017-06-07 12:38:44,248 [8] ERROR EPiServer.Global: 1.2.5 Unhandled exception in ASP.NET
EPiServer.ServiceLocation.ActivationException: Activation error occurred while trying to get instance of type IProfileMigrator, key "" ---> StructureMap.Building.StructureMapBuildException: Error while building type EPiServer.Commerce.Order.Internal.SerializableIdGenerator. See the inner exception for details
1.) new SerializableIdGenerator(Default of SerializableCartDB)
2.) EPiServer.Commerce.Order.Internal.SerializableIdGenerator
3.) Instance of EPiServer.Commerce.Order.Internal.SerializableIdGenerator
4.) new SerializableCartBuilder(Default of SerializableIdGenerator)
5.) EPiServer.Commerce.Order.Internal.SerializableCartBuilder
6.) Instance of EPiServer.Commerce.Order.IOrderGroupBuilder (EPiServer.Commerce.Order.Internal.SerializableCartBuilder)
7.) new OrderGroupFactory(Enumerable of EPiServer.Commerce.Order.IOrderGroupBuilder with all registered instances)
8.) EPiServer.Commerce.Orders.Internal.OrderGroupFactory
9.) Instance of EPiServer.Commerce.Order.IOrderGroupFactory (EPiServer.Commerce.Orders.Internal.OrderGroupFactory)
10.) new SerializableCartProvider(Default of OperationKeysTransformer, Default of SerializableCartDB, Default of ServiceAccessor<SiteContext>, Default of ICurrentMarket, Default of IPurchaseOrderProvider, Default of IPaymentPlanProvider, Default of IOrderGroupFactory, Default of IOrderNumberGenerator)
11.) EPiServer.Commerce.Order.Internal.SerializableCartProvider
12.) Instance of EPiServer.Commerce.Order.ICartProvider (EPiServer.Commerce.Order.Internal.SerializableCartProvider)
13.) new DefaultOrderRepository(Default of ICartProvider, Default of IPurchaseOrderProvider, Default of IPaymentPlanProvider, Default of ISynchronizedObjectInstanceCache, Enumerable of EPiServer.Commerce.Order.IOrderRepositoryCallback with all registered instances)
14.) EPiServer.Commerce.Order.DefaultOrderRepository
15.) Instance of EPiServer.Commerce.Order.IOrderRepository (EPiServer.Commerce.Order.DefaultOrderRepository)
16.) new ProfileMigrator(Default of IOrderRepository, Default of ICurrentMarket, Default of CartMigrator)
17.) EPiServer.Commerce.Order.ProfileMigrator
18.) Instance of EPiServer.Commerce.Order.IProfileMigrator (EPiServer.Commerce.Order.ProfileMigrator)
19.) Container.GetInstance(EPiServer.Commerce.Order.IProfileMigrator)
---> System.NullReferenceException: Object reference not set to an instance of an object.
at EPiServer.Commerce.Order.Internal.SerializableOrderForm.get_OrderFormId()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.Min(IEnumerable`1 source)
at EPiServer.Commerce.Order.Internal.SerializableIdGenerator.InitSerializableIdGenerator()
at lambda_method(Closure , IBuildSession , IContext )
— End of inner exception stack trace —
at lambda_method(Closure , IBuildSession , IContext )
at StructureMap.Building.BuildPlan.Build(IBuildSession session, IContext context)
at StructureMap.Pipeline.LifecycleObjectCache.Get(Type pluginType, Instance instance, IBuildSession session)
at StructureMap.SessionCache.GetObject(Type pluginType, Instance instance, ILifecycle lifecycle)
at StructureMap.SessionCache.GetDefault(Type pluginType, IPipelineGraph pipelineGraph)
at StructureMap.Container.GetInstance(Type pluginType)
at EPiServer.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
— End of inner exception stack trace —
at EPiServer.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
at EPiServer.ServiceLocation.ServiceLocatorImplBase.GetInstance[TService]()
at EPiServer.ServiceLocation.Injected`1.get_Service()
at EPiServer.Business.Commerce.HttpModules.ProfileModule.Profile_MigrateAnonymous(Object sender, ProfileMigrateEventArgs pe)
at System.Web.Profile.ProfileModule.OnEnter(Object source, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)