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

Viewed 13910

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

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

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.

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.

Related