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

3pmvbmvn  于 2023-08-02  发布在  其他
关注(0)|答案(4)|浏览(134)

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

ee7vknir1#

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

uttx8gqw2#

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.

whlutmcx

whlutmcx3#

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.

brjng4g3

brjng4g34#

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

相关问题