【问题标题】:All containing foreign keys must be removed or redefined before the property can be removed - EF Core必须先删除或重新定义所有包含外键,然后才能删除属性 - EF Core
【发布时间】:2021-05-16 00:31:09
【问题描述】:

在使用 Entity Framework 核心添加外键后尝试添加迁移时出现上述错误。 我正在添加 FK

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

这个外键与类相关

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

感谢任何帮助。我尝试删除实体并再次运行迁移,但失败了。

完全错误:

无法从实体类型“EFDataAccessLibrary.Models.ApplicantDetail”中删除属性“GrantProgramId”,因为它正在“EFDataAccessLibrary.Models.ApplicantDetail”的外键 {'GrantProgramId'} 中使用。必须先删除或重新定义所有包含外键,然后才能删除该属性

我找到了一个页面, click here,但这是什么意思?如何解决。

【问题讨论】:

    标签: c# asp.net entity-framework entity-framework-core ef-code-first


    【解决方案1】:

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

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

    我还是不知道为什么。如果有人可以解释或给出解决方案以在其中留下“id”,请随时告诉我们。

    【讨论】:

    • 感谢回复。。不知道是什么原因,但还是会弹出错误。
    • 这也为我解决了,好奇我是否可以以某种方式保留结尾 ID?
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回复。但错误仍然显示。
    • 错误提示“必须先删除或重新定义所有包含外键,然后才能删除该属性”。但我不想删除任何东西。 EF 是什么意思。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2022-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多