【问题标题】:attempted to assign id from null one-to-one property: ContentItemRecord - Orchard CMS试图从空的一对一属性分配 id:ContentItemRecord - Orchard CMS
【发布时间】:2012-10-07 01:03:31
【问题描述】:

我正在为 Orchard CMS 编写模块。

有几张桌子。在 Migrations.cs 中:

效果很好:

            SchemaBuilder.CreateTable("CustomerPartRecord", table => table
            .ContentPartRecord()
            .Column<string>("FirstName", c => c.WithLength(50))
            .Column<string>("LastName", c => c.WithLength(50))
            .Column<string>("Title", c => c.WithLength(10))
            .Column<DateTime>("CreatedUtc")
            );

        ContentDefinitionManager.AlterPartDefinition("CustomerPart", part => part
            .Attachable(false)
            );

        ContentDefinitionManager.AlterTypeDefinition("Customer", type => type
            .WithPart("CustomerPart")
            .WithPart("UserPart")
            );
        return 6;

但它不起作用:

            SchemaBuilder.CreateTable("OrderPartRecord", t => t
            .ContentPartRecord()
            .Column<int>("CustomerId", c => c.NotNull())
            .Column<DateTime>("CreatedAt", c => c.NotNull())
            .Column<decimal>("SubTotal", c => c.NotNull())
            .Column<string>("Status", c => c.WithLength(50).NotNull())
            );

        ContentDefinitionManager.AlterPartDefinition("OrderPart", part => part
             .Attachable(false)
        );

        ContentDefinitionManager.AlterTypeDefinition("Order", type => type
            .WithPart("OrderPart")
        );

我尝试添加订单时出错。错误:试图从空的一对一属性中分配 id:ContentItemRecord出了什么问题?

更新:

处理程序:

public class OrderPartHandler : ContentHandler
{
    public OrderPartHandler(IRepository<OrderPartRecord> repository)
    {
        Filters.Add(StorageFilter.For(repository));
    }
}

并创建订单:

_orderRepository.Create(order);

【问题讨论】:

  • 错误是什么时候发生的?您是否尝试使用 IRepository 添加订单? :)
  • 是的,我使用它。我更新了我的帖子以显示它。

标签: c# asp.net orchardcms


【解决方案1】:

您永远不应该为零件记录自己创建记录。如果要在没有内容项的情况下创建它,请将其设为常规记录,而不是内容部分记录。内容部分记录需要始终与内容项相关联,并通过内容管理器创建,而不是直接通过存储库创建。

【讨论】:

  • 谢谢,你的回答让我明白了很多事情。
  • 好的,谢谢。但我想指出,你不是很好。在 SO 上,最好的内容会随着人们投票而上升。它不是乞求鼓励好的做法。我几乎不需要自己的选票。
  • 好吧,对不起,我承认这很粗鲁。然而,“投票”评论也感觉如此,尤其是。如果你已经投票了。和平:)
  • 对于任何想知道的人来说,“常规”记录是没有基本类型的记录。您需要自己添加 ID 属性,因为它之前驻留在 ContentPartRecord 中。 '公共虚拟 int Id { 获取;放; }'
【解决方案2】:

正如我所猜测的,您正在尝试使用存储库创建一个订单,如果您没有采取足够的措施,则会导致错误。要解决此问题,请使用 ContentManager 创建订单,因为 Order 实际上是一个内容项。

PS:/ 这个错误与nHibernate有关,特别是关于实体之间的关联。阅读此链接了解更多信息:Hibernate : attempted to assign id from null one-to-one property: employee

【讨论】:

  • 如果有人真的记录了 ContentManager,那就太好了。理解它的唯一方法是找到代码sn-p或挖掘代码。
【解决方案3】:

实际上您可以通过将缺少的参数分配给您的零件记录来解决此问题,它只需要填写订单。ContentPartRecord = your_content_item.Record;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2021-12-25
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多