我在使用实体框架核心添加外键后尝试添加迁移时遇到上述错误。我正在添加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,但这是什么意思?如何解决它.
8条答案
按热度按时间cbjzeqam1#
我遇到了同样的问题,我通过删除外键中的“id”来解决它:
我仍然不知道为什么。如果有人能解释,或者给予一个解决方案,把“id”留在里面,不要犹豫告诉我们。
30byixjq2#
由于entityframework自动使用任何以“ID或Id或id”结尾的标识符,因此请确保没有其他属性名称以“ID或Id或id”结尾
iyzzxitl3#
我建议删除解决方案中以前的迁移文件,这对我很有效
6ovsh4lw4#
我得到了同样的错误,在我的情况下,我所做的只是撤销在迁移文件夹中创建的AppDbContextModelSnapshot文件(您也可以删除该文件)中的更改。
原来我在执行迁移之前犯了一个错误,之后创建了我的AppDbContext的模型快照。修复错误后,我再次尝试迁移,但AppDbContextModelSnapshot已经被修改,EF不允许使用相同型号的相同密钥进行覆盖**(* 在本例中,GrantProgramFK来自GrantProgram模型 *)**。因此,只需撤消AppDbContextModelSnapshot文件中的更改,然后再次执行迁移。
sirbozc55#
我可以通过进入Migrations文件夹中的ModelSnapShot.cs并确保删除对导致问题的属性的所有引用来解决此问题。您将查找对“GrantProgramIdId”的任何引用。
确保删除快照创建外键的所有行。
更改属性名称包含上述不正确属性名称的任何示例。
确保检查整个文件。应该有两个单独的地方存在问题。
此外,删除包含此属性的所有迁移,然后创建新迁移,这样就可以开始了。
mm9b1k5b6#
我遇到了同样的问题。您必须删除(删除迁移也不起作用,所以我手动删除)迁移和快照,并更改此字段:
到
mbskvtky7#
您必须在迁移之前修复您的类:
kg7wmglp8#
添加数据注解,一切都将顺利进行,请参见