Lionbridge CMS 12 SQL Fix for Property Definitions
We have a client that upgraded to CMS 12. They were using Lionbridge previously for translations, but when we installed the newest version (2.0.0.1200) we got the following exception on Startup:
Full stack trace:
EPiServer.Framework.Initialization.InitializationException: Initialize action failed for Initialize on class Lionbridge.Translate.WorkspaceInitializer, LionbridgeConnector, Version=2.0.0.1200, Culture=neutral, PublicKeyToken=null
---> System.InvalidOperationException: Lazy loaded property value is not supported by the current property instance
at EPiServer.DataAccess.Internal.LazyPropertyValueLoader.SetValue(PropertyData property, PropertyDataRecord dataRecord, Func`3 valueConverter)
at EPiServer.DataAccess.Internal.JsonPropertyValueConverter.SetValue(PropertyJson property, PropertyDataRecord dataRecord, PropertyValueConverterContext context)
at EPiServer.DataAccess.Internal.JsonPropertyValueConverter.EPiServer.DataAccess.Internal.IPropertyValueConverter.SetValue(PropertyData property, PropertyDataRecord dataRecord, PropertyValueConverterContext context)
at EPiServer.DataAccess.Internal.ContentDB.ReadPropertyData(PropertyData prop, DbDataReader reader, ContentReference contentLink, CultureInfo language)
at EPiServer.DataAccess.Internal.ContentListDB.ReadCustomProperties(DbDataReader reader, Dictionary`2 allFetchedItems, Boolean isReadingVersions)
at EPiServer.DataAccess.Internal.ContentListDB.ReadPublishedList(DbCommand cmd)
at EPiServer.DataAccess.Internal.ContentListDB.<>c__DisplayClass19_0.<LoadSpecificContentInstances>b__0()
at EPiServer.Data.Providers.Internal.SqlDatabaseExecutor.<>c__DisplayClass24_0`1.<Execute>b__0()
at EPiServer.Data.Providers.SqlTransientErrorsRetryPolicy.Execute[TResult](Func`1 method)
at EPiServer.Data.Providers.Internal.SqlDatabaseExecutor.Execute[TResult](Func`1 action)
at EPiServer.DataAccess.Internal.ContentListDB.LoadSpecificContentInstances(IList`1 contentLinks, Int32 languageBranchID)
at EPiServer.Core.Internal.DefaultContentProviderDatabase.LoadSpecificContentInstances(IList`1 contentLinks, Int32 languageBranchID)
at EPiServer.Core.Internal.DefaultContentProvider.<>c__DisplayClass13_0.<LoadContents>b__1(IList`1 refs)
at EPiServer.Core.Internal.DefaultContentProvider.BatchLoad(IList`1 contentLinks, Func`2 dbLoader)
at EPiServer.Core.Internal.DefaultContentProvider.LoadContents(IList`1 contentReferences, ILanguageSelector selector)
at EPiServer.Core.ContentProvider.GetContentBatch(IList`1 batch, ILanguageSelector selector, List`1& contents, Dictionary`2& contentMap)
at EPiServer.Core.ContentProvider.GetScatteredContents(IEnumerable`1 contentLinks, ILanguageSelector selector)
at EPiServer.Core.ContentProvider.LoadBatched(IList`1 contentReferences, ILanguageSelector selector)
at EPiServer.Core.Internal.ProviderPipelineImplementation.GetItems(ContentProvider provider, IList`1 contentLinks, LoaderOptions loaderOptions)
at EPiServer.Core.Internal.DefaultContentLoader.GetChildren[T](ContentReference contentLink, LoaderOptions loaderOptions, Int32 startIndex, Int32 maxRows)
at EPiServer.Core.Internal.DefaultContentLoader.GetChildren[T](ContentReference contentLink, LoaderOptions loaderOptions)
at EPiServer.Core.Internal.DefaultContentLoader.GetChildren[T](ContentReference contentLink)
at Advanced.CMS.ExternalReviews.DraftContentLoader.GetChildren[T](ContentReference contentLink)
at EPiServer.Core.Internal.DefaultContentRepository.GetChildren[T](ContentReference contentLink)
at Lionbridge.Translate.WorkspaceInitializer.Initialize(InitializationEngine context)
at EPiServer.Framework.Initialization.Internal.ModuleNode.<>c__DisplayClass4_0.<Initialize>b__0()
at EPiServer.Framework.Initialization.Internal.ModuleNode.Execute(Action a, String key)
at EPiServer.Framework.Initialization.Internal.ModuleNode.Initialize(InitializationEngine context)
at EPiServer.Framework.Initialization.InitializationEngine.InitializeModules()
--- End of inner exception stack trace ---
at EPiServer.Framework.Initialization.InitializationEngine.InitializeModules()
at EPiServer.Framework.Initialization.InitializationEngine.ExecuteTransition(Boolean continueTransitions)
at EPiServer.Framework.Initialization.InitializationEngine.Initialize()
at EPiServer.Hosting.Internal.EPiServerFrameworkHost.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
at BBSCatalyst.Web.Program.Main(String[] args) in C:\Users\Sam\source\repos\neogen-episerver\WebsiteSolution\BBSCatalyst.Web\Program.cs:line 15
After much digging, we found the issue had to do with these property definition types: Analysis Code List, Project Configuration
These old property definition types were still assigned to the property definitions for the Lionbridge content types, we fixed the issue ourselves manually using the following script:
/* Update Lionbridge Property Definitions to have the new property definition types*/
DECLARE @OldAnalysisCodeTypeId AS INT = (SELECT Top 1 pkId FROM [dbo].[tblPropertyDefinitionType] WHERE TypeName = 'Lionbridge.Translate.AnalysisCodeListProperty')
DECLARE @NewAnalysisCodeTypeId AS INT = (SELECT Top 1 pkId FROM [dbo].[tblPropertyDefinitionType] WHERE TypeName = 'LionbridgeConnector.EPiServer.Workspace.Models.AnalysisCodes')
DECLARE @OldProjectConfigTypeId AS INT = (SELECT Top 1 pkId FROM [dbo].[tblPropertyDefinitionType] WHERE TypeName = 'Lionbridge.Translate.ProjectConfigurationListProperty')
DECLARE @NewProjectConfigTypeId AS INT = (SELECT Top 1 pkId FROM [dbo].[tblPropertyDefinitionType] WHERE TypeName = 'LionbridgeConnector.EPiServer.Workspace.Models.ProjectConfigurations')
UPDATE [dbo].[tblPropertyDefinition] SET fkPropertyDefinitionTypeID = @NewAnalysisCodeTypeId WHERE fkPropertyDefinitionTypeID = @OldAnalysisCodeTypeId
UPDATE [dbo].[tblPropertyDefinition] SET fkPropertyDefinitionTypeID = @NewProjectConfigTypeId WHERE fkPropertyDefinitionTypeID = @OldProjectConfigTypeId
I'm assuming this must have been overlooked in the newest version of Lionbridge Connector, although I'm not 100% sure why this occurred for our client.
Comments