【问题标题】:The item with identity 'Id' already exists in the metadata collection. Parameter name: item具有身份“Id”的项目已存在于元数据集合中。参数名称:项目
【发布时间】:2014-04-22 07:30:09
【问题描述】:

我所有的实体都有一个基类:

public class Entity<TKey> : IEntity<TKey>
{
    dynamic IEntity.Id
    {
        get
        {
            return this.Id;
        }
        set
        {
            this.Id = value;
        }
    }

    public TKey Id { get; set; }
}

例如状态实体:

[MetadataType(typeof(StatusMetadata))]
public partial class Status : Entity<byte>
{
       public string Title { get; set; }
}

当我对数据库运行查询时,我收到以下错误:“元数据集合中已存在身份为 'Id' 的项目。参数名称:项目”。 有没有办法解决这个问题,或者这是由继承引起的问题,我不能从任何类继承我的实体?

【问题讨论】:

    标签: c# entity-framework entity-framework-6


    【解决方案1】:

    这似乎是一个通用错误,搜索一些见解,我看到了:

    Two tables can have the same name for a primary key. Look at the LightSwitch tables, they all have a primary key called Id.

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/bd8d47da-d1b4-4be8-a7e5-193fb5360060/the-item-with-identity-actionpk-already-exists-in-the-metadata-collection?forum=lightswitch

    因此,我查看了所有实体,并获得了一个更改了 Identiy 数据类型并继承了另一个具有 int Id 属性的类的实体。

    我是否像其他人一样将这个 public new string Id { get; set; } 更改为 public string Id { get; set; } 并删除继承,一切正常。

    【讨论】:

      【解决方案2】:

      原因是你继承自一个已经具有不同类型的 Id 属性的类。

      我在 CodeMigrations 中看到了同样的错误。我有一个字符串类型的名为“Version”的属性,而我从中继承的 EntityData 数据类也包含一个字节 [] 类型的 Version 属性。这产生了与您提到的相同的错误

      解决方案只是不要使用与您的基类中已有的相同的属性名称

      【讨论】:

      • 我在使用 EF 6.1.2 时遇到了这个问题。我升级到 EF 6.1.3,问题神奇地消失了。
      • 已确认。 EF 6.1.3 似乎支持属性隐藏。
      【解决方案3】:

      发生在我身上是因为双字段 FK,我错误地使用了两次相同的字段来链接表格......

      【讨论】:

        【解决方案4】:

        尝试像这样向属性添加“新”:

        [MetadataType(typeof(StatusMetadata))]
        public partial class Status : Entity<byte>
        {
               public new string Title { get; set; }
        }
        

        【讨论】:

        • 你在 EF6 中试过这个吗?
        • 我还没用过。您面临的问题可能是由于您在已经继承实体类的 Type 属性的类中定义 Title 属性:)
        • 我认为 EF 不支持参数隐藏。它没有在 EF5.x 中我没有在 ef6.x 中尝试过,例如 stackoverflow.com/q/18245686/1347784
        • 正如您在我的示例中看到的那样,基类没有属性 Title,但它有属性 Id,这在继承的类中没有定义。
        猜你喜欢
        • 2012-04-14
        • 2016-09-25
        • 1970-01-01
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多