The item with identity 'Id' already exists

2019-04-28 10:55发布

All of my entities have a base class:

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

    public TKey Id { get; set; }
}

For example Status entity:

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

When I run the query against the database I get the following error: "The item with identity 'Id' already exists in the metadata collection. Parameter name: item". Is there any way to fix this or it's an issue caused by inheritance and I can't inherit my entities from any class?

4条回答
淡お忘
2楼-- · 2019-04-28 11:19

It happened to me because of a double field FK, that mistakenly I used the same field twice to link the tables...

查看更多
劳资没心,怎么记你
3楼-- · 2019-04-28 11:24

The reason is because you inherit from a class that already has an Id property of a different type.

I have seen the same error in CodeMigrations. I had a property named "Version" of type string, and the EntityData data class where I was inheriting from also containes a Version property of type byte[]. This generated the same error as you mentioned

The solution for this is just to don't use the same property names that are already in your base class.

查看更多
时光不老,我们不散
4楼-- · 2019-04-28 11:25

Try adding 'new' to the property like this:

[MetadataType(typeof(StatusMetadata))]
public partial class Status : Entity<byte>
{
       public new string Title { get; set; }
}
查看更多
爷、活的狠高调
5楼-- · 2019-04-28 11:33

It seems a generic error, searching for some insights, I saw that:

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

At 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

So, I review all entities and I get an entity with a Identiy data type changed and a inherit another class it has int Id property.

Do I change this public new string Id { get; set; } to public string Id { get; set; } like others and remove the inherit and everything works fine.

查看更多
登录 后发表回答