具有身份' Id'已经存在于元数据集合中。参数名称:item

时间:2014-04-22 07:30:10

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

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

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; }
}

当我对数据库运行查询时,我收到以下错误:&#34;带有标识的项目&#39; Id&#39;已经存在于元数据集合中。参数名称:item&#34;。 有没有办法解决这个问题,或者它是由继承引起的问题,我不能从任何类继承我的实体?

4 个答案:

答案 0 :(得分:5)

这似乎是一般性错误,正在寻找一些见解,我看到了:

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; }并删除了继承,一切正常。

答案 1 :(得分:5)

原因是您从已经具有不同类型的Id属性的类继承。

我在CodeMigrations中看到了同样的错误。我有一个名为&#34;版本&#34;类型字符串,我继承的EntityData数据类也包含byte []类型的Version属性。这会产生与您提到的相同的错误

解决此问题的方法是不要使用基类中已有的相同属性名称

答案 2 :(得分:0)

由于双场FK而发生在我身上,我错误地使用了两次相同的场来链接表格......

答案 3 :(得分:-1)

尝试将“new”添加到属性中,如下所示:

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