【问题标题】:EF "The member with identity X does not exist in the metadata collection" (and NopCommerce)EF“元数据集合中不存在身份为 X 的成员”(和 NopCommerce)
【发布时间】:2014-04-30 15:12:44
【问题描述】:

首先,正如您在标题中看到的那样,我正在为 nopCommerce 设计一个插件。我相信问题与它无关(但与实体框架有关),但我不太确定。

我的插件可以访问数据,nopCommerce 让我创建自己的上下文,创建所需的表和关系。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new ParentMap());
    modelBuilder.Configurations.Add(new ChildMap());
}

从概念上讲,我想要的是:

ROOT TABLE ----(1:N)---- CHILDTABLE ----(1:1)---- EXISTING NOPCOMMERCE TABLE

在数据库中创建的表和列对我来说似乎是正确的。映射非常简单:

public ParentMap()
{
    ToTable("TableA");

    HasKey(m => m.Id);

    Property(m => m.SomeProperty);

    HasMany(m => m.Child).WithRequired(s => s.Parent).WillCascadeOnDelete();
}

public ChildMap()
{
    ToTable("TableB");

    HasKey(m => new {  m.Id });

    HasRequired(m => m.NopCommerceEntity);

    HasRequired(m => m.Parent);
}

到此为止,一切似乎都运行良好,注册完毕,应用程序启动。当我尝试插入或更新与 nopCommerce 实体相关的任何内容时,出现以下异常:

“元数据集合中不存在身份为“Namespace.ChildObject_NopCommerceEntity”的成员。\r\n参数名称:身份”。

我一直认为问题可能与我没有在 OnModelCreating 中添加其他映射有关。我试图在那里添加所有相关的映射,但我得到了同样的异常。

这有点复杂。非常感谢您的帮助和时间:)

【问题讨论】:

    标签: entity-framework nopcommerce


    【解决方案1】:

    你是对的,这个问题与实体框架有关,因为 EF 不支持跨项目的 POCO 关系。您必须从插件中的 NopEntities 中删除任何具有实体的属性,而是使用该实体的 Id 作为 int,如下所示:

    public int ProductId { get; set; }
    

    而不是

    public virtual Product Product { get; set; }
    

    并且在映射中你不应该指定你的实体和 Nop 之间的关系。

    【讨论】:

    • 感谢谢里夫·艾哈迈德。伟大的洞察力。现在我看到了,它更加明显,但如果你没有意识到你正在从事不同的项目,就很难发现!
    • “实体框架,因为 EF 不支持跨项目 POCO 关系”你有没有机会获得它的来源?谢谢?
    【解决方案2】:

    我认为您仍然可以在您的子类中使用以下关系

    公共 int ProductId { 获取;放; } 公共虚拟产品 Product { 获取;放; }

    但是当你保存或更新子类时,而不是设置

    child.Product = 产品

    改为设置以下

    child.ProductId = product.Id

    而且我认为在您的 PluginObjectContext 插件类中继承自 NopObjectContext

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 2016-08-04
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多