Quantcast
Channel: Optimizely Search & Navigation
Viewing all articles
Browse latest Browse all 6894

DDS Delete property in nested type error

$
0
0

Hi!

I have a model within a model wich is working fine until I delete public property from the nested model. This generates server error when saving it to the store. 

Shouldn't the class attribute handle cases like that?

Is there a way of manually mapping a nested model like that?

[EPiServerDataStore(AutomaticallyCreateStore = true, AutomaticallyRemapStore = true)]
public class ConfigurationItemDataModel
{
    [EPiServerDataIndex] public Identity Id { get; set; }
    public ConfigDataModel BasicConfig { get; set; }
}

The nested model:

[EPiServerDataStore(AutomaticallyCreateStore = true, AutomaticallyRemapStore = true)]
public class ConfigDataModel
{
    [JsonIgnore] [EPiServerDataIndex] public Identity Id { get; set; }
    [JsonProperty ( "title" )] public string Title { get; set; }
    [JsonProperty ( "baseUrl" )] public string BaseUrl { get; set; }
    [JsonProperty ( "imageUrl" )] public string BackgroundImageUrl { get; set; } // <-- the deleted property
}

And the saving:

public ConfigurationItemViewModel SaveConfiguration ( ConfigurationItemDataModel data ) 
{
    using ( var store = DynamicDataStoreFactory.Instance.GetOrCreateStore ( typeof ( ConfigurationItemDataModel ) ) )
    {
    var existingItem = store.Items<ConfigurationItemDataModel> ()
        .FirstOrDefault ( m => m.Id.StoreId == data.Id );
    if ( existingItem != null )
    {
        data.Id = existingItem.Id;
        data.BasicConfig.Id = existingItem.BasicConfig.Id;
    }
    //Here be errors:
    store.Save ( data );
    return data;
    }
}

And it all works great, but when I delete property from the nested model(ConfigDataModel), then Episerver does not know what to do at Save() and throws this error:

Server Error in '/' Application.
Method 'Models.DataModels.ConfigDataModel.BackgroundImageUrl' not found.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.MissingMethodException: Method 'Models.DataModels.ConfigDataModel.BackgroundImageUrl' not found.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[MissingMethodException: Method 'DataModels.ConfigDataModel.BackgroundImageUrl' not found.]
   System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) +12977553
   EPiServer.Data.Dynamic.PropertyBagObjectsExtensions.ToPropertyBag(Object value, IEnumerable`1 propertyNames) +202
   EPiServer.Data.Dynamic.DynamicDataStore.InternalSave(Identity id, Object value, TypeToStoreMapper typeToStoreMapper, ProviderCallContext parentContext) +60
   EPiServer.Data.Dynamic.Providers.Internal.DbDataStoreProvider.SaveSubObject(String propertyName, Object value, ProviderCallContext context, String& storeName) +488
   EPiServer.Data.Dynamic.Providers.Internal.<>c__DisplayClass50_0.<Save>b__0() +870
   EPiServer.Data.Providers.Internal.<>c__DisplayClass32_0.<ExecuteTransaction>b__0() +10
   EPiServer.Data.Providers.Internal.<>c__DisplayClass33_0`1.<ExecuteTransaction>b__0() +55
   EPiServer.Data.Providers.SqlTransientErrorsRetryPolicy.Execute(Func`1 method) +45
   EPiServer.Data.Providers.Internal.SqlDatabaseExecutor.ExecuteTransaction(Func`1 action) +125
   EPiServer.Data.Providers.Internal.SqlDatabaseExecutor.ExecuteTransaction(Action action) +90
   EPiServer.Data.Dynamic.Providers.Internal.DbDataStoreProvider.Save(ProviderCallContext context) +113
   EPiServer.Data.Dynamic.DynamicDataStore.InternalSave(Identity id, Object value, TypeToStoreMapper typeToStoreMapper, ProviderCallContext parentContext) +343
   EPiServer.Data.Dynamic.Internal.EPiServerDynamicDataStore.Save(Object value) +12
   Helpers.Services.DataDdsService.SaveConfiguration(ConfigurationItemViewModel userInput) +610
   Controllers.EditConfigurationController.SaveConfiguration(ConfigurationItemViewModel input) +144
   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) +157
   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() +228
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +228
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +228
   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) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   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) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +576
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +132
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +163


Viewing all articles
Browse latest Browse all 6894

Trending Articles