kudlatiger
kudlatiger

Reputation: 3278

Property or navigation with the same name already exists on entity type - how to add foreign keys in migration scenario of Entity Framework

I have this class with only the foreign key references:

public class Device
{
    [Required]
    [DataMember(Name = "key")]
    [Key]
    public Guid Key { get; set; }

    [ForeignKey("DeviceType")]
    [IgnoreDataMember]
    public virtual DeviceType DeviceType { get; set; }

    [ForeignKey("Model")]
    [IgnoreDataMember]
    public virtual ModelType Model { get; set; }
}

I get an error while running the command

 Add-Migration -Name "DeviceMigration"

Error is:

The property or navigation 'DeviceType' cannot be added to the entity type 'Device' because a property or navigation with the same name already exists on entity type 'Device'.

This is my context class content

 public class MyContext: DbContext
 {
     public MyContext(DbContextOptions<MyContext> options)
        : base(options)
     { }

     public DbSet<DeviceType> DeviceTypes { get; set; }
     public DbSet<Device> Devices { get; set; }
 }

Upvotes: 6

Views: 23007

Answers (4)

Mr_K
Mr_K

Reputation: 16

I had a similar problem, which was caused by wrongly specifying the primary keys of the table.

Upvotes: 0

snnpro
snnpro

Reputation: 307

If all solutions provided above fails, just delete the migrations folder and recreate the migrations. This error may arise due to visual studio cache references.

One could alternatively rename the property on the target entity.

Upvotes: -1

Oğuzhan Kahyaoğlu
Oğuzhan Kahyaoğlu

Reputation: 1819

For my situation, I misused ForeignKey attribute:

[IgnoreMap]
public long? PLCalculationMasterId { get; set; }
[ForeignKey("PLCalculationMaster"), IgnoreMap, IgnoreDataMember]
public PLCalculationMaster PLCalculationMaster{ get; set; }

whereas it should have been:

[IgnoreMap]
public long? PLCalculationMasterId { get; set; }
[ForeignKey("PLCalculationMasterId"), IgnoreMap, IgnoreDataMember]
public PLCalculationMaster PLCalculationMaster{ get; set; }

Upvotes: 5

TanvirArjel
TanvirArjel

Reputation: 32079

Write your Device model class as follows:

public class Device
{
    [Required]
    [DataMember(Name = "key")]
    [Key]
    public Guid Key { get; set; }


    [ForeignKey("DeviceType")]   
    public Guid DeviceTypeId { get; set; } // I assumed primary key of your `DeviceType` entity is `Guid`

    [ForeignKey("ModelType")]  
    public Guid ModelTypeId { get; set; } // I assumed primary key of your `ModelType` entity is `Guid`


    [IgnoreDataMember]
    public virtual DeviceType DeviceType { get; set; }


    [IgnoreDataMember]
    public virtual ModelType ModelType { get; set; }
}

Now generate the migration. Hope everything will work fine.

Upvotes: 3

Related Questions