在属性被移除之前,必须移除或重新定义所有包含外键的属性



当尝试使用实体框架核心添加外键后添加迁移时,我得到上述错误。我在

中加入了FK
public class ApplicantDetail
{
[Key]
public int Id { get; set; }
[ForeignKey("GrantProgramFK")]
public GrantProgram GrantProgramId { get; set; }
--------
}

这个FK绑定到类

public class GrantProgram
{
[Key]
public int Id { get; set; }
-----
}

任何帮助都是感激的。我试图删除实体并再次运行迁移,但失败了。

完全错误:

属性'GrantProgramId'不能从实体类型'EFDataAccessLibrary.Models中删除。ApplicantDetail',因为它正在'EFDataAccessLibrary.Models.ApplicantDetail'的外键{'GrantProgramId'}中使用。在删除属性之前,必须删除或重新定义所有包含外键的

我找到了一页,点击这里,这是什么意思呢?如何解决

我也遇到了同样的问题。我通过删除"id"解决了这个问题。外键:

public class ApplicantDetail
{
[Key]
public int Id { get; set; }
[ForeignKey("GrantProgramFK")]
public GrantProgram GrantProgram { get; set; }
--------
}

我还是不知道为什么。如果有人能解释一下,或者给出一个解决办法,请离开"我"。在里面,不要犹豫,告诉我们。

由于entityframework会自动使用任何以'ID或ID或ID '结尾的标识符,因此请确保没有其他属性名以'ID或ID或ID '结尾

我建议在解决方案中删除以前的迁移文件,这对我有用

我得到同样的错误,在我的情况下,我所做的就是撤消AppDbContextModelSnapshot文件中的更改(您也可以删除该文件),该文件是在迁移文件夹中创建的。

原来我在执行迁移之前犯了一个错误,之后创建了我的AppDbContext的模型快照。修复错误后,我再次尝试迁移,但是AppDbContextModelSnapshot已经被修改,EF不允许使用相同模型的相同键覆盖(在这种情况下,GrantProgramFK来自GrantProgram模型)。因此,只需撤销AppDbContextModelSnapshot文件中的更改,并再次执行迁移。

我能够通过进入Migrations文件夹中的ModelSnapShot.cs并确保删除对导致问题的属性的所有引用来解决问题。您将查找对'GrantProgramIdId'的任何引用。

确保删除快照创建外键的所有行。

更改属性名中包含上述不正确属性名的任何实例。

确保检查了整个文件。问题应该在两个不同的地方存在。

同样,删除包含此属性的任何迁移,然后创建一个新的迁移,并且应该可以正常运行。

我也有同样的问题。您必须删除(删除迁移也不起作用,所以我手动删除)迁移和快照并更改此字段:

public GrantProgram GrantProgramId { get; set; }

public int GrantProgramId { get; set; }

我也经历过同样的错误。下面是我为了解决这个错误所做的尝试:

  1. 重命名带有"id"的ForeignKey属性或";id"。
  2. 删除在使用"id"分配外键属性之前进行的所有迁移。

你必须在迁移之前修复你的类:

public class ApplicantDetail
{
[Key]
public int Id { get; set; }
public int? GrantProgramId { get; set; }
[ForeignKey("GrantProgramId")]
[InverseProperty("ApplicantDetails")]
public GrantProgram GrantProgram{ get; set; }
--------
}
public class GrantProgram
{
[Key]
public int Id { get; set; }
[InverseProperty(nameof(ApplicantDetail.GrantProram))]
public virtual ICollection<ApplicantDetail> ApplicantDetails{ get; set; }
-----
}

添加数据注释,一切都会顺利进行,参见

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public class Address
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name ="Address Id")]
public int AddressId { get; set; }
public string Street { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public int? StateId { get; set; }
public string Country { get; set; } = string.Empty;
public string ZipCode { get; set; } = string.Empty;
}
public class State
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name ="State Id")]
public int StateId { get; set; }
public string StateName { get; set; } = string.Empty;
}

最新更新