【问题标题】:orchard cms content part, field gets added twice and can't remove果园 cms 内容部分,字段被添加两次且无法删除
【发布时间】:2016-01-26 13:36:24
【问题描述】:

我在内容部分添加了一个简单的字段

ContentDefinitionManager.AlterPartDefinition("CarouselContentPart", b =>
            b
            .WithField("AutoPlay", cfg =>
                cfg.OfType("NumericField")
                    .WithSetting("NumericFieldSettings.Hint", "Enter a value in milliseconds for autoplay (leave blank for no autoplay)")
                    .WithSetting("NumericFieldSettings.Required", "false")
                    .WithDisplayName("Autoplay"))
            );

        return 18;

它被添加了两次,现在我无法删除它,无论是通过另一次迁移还是通过后台办公室。这是堆栈跟踪

发生了未处理的异常,请求已终止。请刷新页面。如果错误仍然存​​在,请返回 序列包含多个匹配元素 System.InvalidOperationException:序列在 System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable1 source, Func2 谓词) 处包含多个匹配元素,位于 C:\ Development\FE-Corporate\src\Orchard\ContentManagement\MetaData\Builders\ContentPartDefinitionBuilder.cs:Orchard.ContentTypes.Services.ContentDefinitionService 的第 46 行。c__DisplayClass48.b__47(ContentPartDefinitionBuilder typeBuilder) 在 Orchard.ContentManagement.MetaData.ContentDefinitionManagerExtensions.AlterPartDefinition (IContentDefinitionManager 管理器,字符串名称,Action1 alteration) in C:\Development\FE-Corporate\src\Orchard\ContentManagement\MetaData\IContentDefinitionManager.cs:line 32 at Orchard.ContentTypes.Services.ContentDefinitionService.RemoveFieldFromPart(String fieldName, String partName) at Orchard.ContentTypes.Controllers.AdminController.RemoveFieldFromPOST(String id) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 参数)在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async .AsyncResultWrapper.WrappedAsyncResultBase`1.End() 在 System.Web.Mvc.Async.AsyncContro llerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c__DisplayClass46.b__3f() 在 System.Web.Mvc。 Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c__DisplayClass46。 b__3f()

【问题讨论】:

  • 看起来代码只需要一个字段并且不能使用多个字段。我想您唯一的选择是从附加字段的数据库中删除一些记录

标签: c# asp.net orchardcms orchardcms-1.9


【解决方案1】:

如果您的新内容部分中没有任何重要数据,但您可以尝试通过迁移删除并重新创建它。

这会让您丢失为内容部分保存的所有数据,但也会让您有机会一刀两断。

您可以像这样删除内容部分:

    public int UpdateFrom18() {
        // remove the CarouselContentPart part cleanly
        ContentDefinitionManager.DeletePartDefinition(typeof (CarouselContentPart).Name);
enter code here
        // re-add the CarouselContentPart again
        // NOTE: Change this bit to add include whatever you have created in your previous 17 migrations such as setting up the part and adding fields
        ContentDefinitionManager.AlterPartDefinition(typeof (CarouselContentPart).Name,
            cfg = > cfg
            .Attachable()
            .WithDescription("Some kind of description, etc"));
        return 4;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多