asp.net 在删除属性之前,必须删除或重新定义所有包含的外键- EF Core

kqhtkvqz  于 2023-01-06  发布在  .NET
关注(0)|答案(8)|浏览(117)

我在使用实体框架核心添加外键后尝试添加迁移时遇到上述错误。我正在添加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; }
   -----
    }

感谢您的帮助。我尝试删除实体并再次运行迁移,但失败了。
完整错误:
无法从实体类型"EFDaAccessLibrary. Models. ApplicationDetail"中删除属性"GrantProgramId",因为"EFDaAccessLibrary. Models. ApplicationDetail"的外键{" GrantProgramId "}中正在使用该属性。必须删除或重新定义所有包含该属性的外键,然后才能删除该属性
我发现了一个页面,click here,但这是什么意思?如何解决它.

cbjzeqam

cbjzeqam1#

我遇到了同样的问题,我通过删除外键中的“id”来解决它:

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

我仍然不知道为什么。如果有人能解释,或者给予一个解决方案,把“id”留在里面,不要犹豫告诉我们。

30byixjq

30byixjq2#

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

iyzzxitl

iyzzxitl3#

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

6ovsh4lw

6ovsh4lw4#

我得到了同样的错误,在我的情况下,我所做的只是撤销在迁移文件夹中创建的AppDbContextModelSnapshot文件(您也可以删除该文件)中的更改。
原来我在执行迁移之前犯了一个错误,之后创建了我的AppDbContext的模型快照。修复错误后,我再次尝试迁移,但AppDbContextModelSnapshot已经被修改,EF不允许使用相同型号的相同密钥进行覆盖**(* 在本例中,GrantProgramFK来自GrantProgram模型 *)**。因此,只需撤消AppDbContextModelSnapshot文件中的更改,然后再次执行迁移。

sirbozc5

sirbozc55#

我可以通过进入Migrations文件夹中的ModelSnapShot.cs并确保删除对导致问题的属性的所有引用来解决此问题。您将查找对“GrantProgramIdId”的任何引用。
确保删除快照创建外键的所有行。
更改属性名称包含上述不正确属性名称的任何示例。
确保检查整个文件。应该有两个单独的地方存在问题。
此外,删除包含此属性的所有迁移,然后创建新迁移,这样就可以开始了。

mm9b1k5b

mm9b1k5b6#

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

public GrantProgram GrantProgramId { get; set; }

public int GrantProgramId { get; set; }
mbskvtky

mbskvtky7#

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

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

kg7wmglp8#

添加数据注解,一切都将顺利进行,请参见

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

相关问题