EF Core提示无效列名IssueActivityId1但表未定义该字段如何解决
问题原因
出现无效列名IssueActivityId1报错是因为EF Core自动生成了额外的影子外键字段,触发原因是你配置一对多关系时未正确关联反向导航属性:
你在IssueActivitiy的FluentAPI配置中,定义IssueActivitiy到IssueActivitiyDetail的一对多关系时,WithOne()没有传入参数,相当于告诉EF Core这个关系的「一」侧没有反向导航属性。但你在IssueActivitiyDetail实体中已经定义了public virtual IssueActivitiy IssueActivitiy { get; set; }导航属性,EF Core会将这个未匹配到配置的导航识别为另一个独立的一对多关系,自动为其生成新的外键,命名规则为原有外键名加后缀1,就出现了你遇到的不存在的IssueActivityId1字段。
解决方案
修改IssueActivitiy的FluentAPI配置,在WithOne中指定对应的反向导航属性即可:
// 修改前 modelBuilder.HasMany(z => z.IssueActivitiyDetails) .WithOne() .HasForeignKey(z=> z.IssueActivitiyId); // 修改后 modelBuilder.HasMany(z => z.IssueActivitiyDetails) .WithOne(z => z.IssueActivitiy) .HasForeignKey(z=> z.IssueActivitiyId);
可选优化建议
你当前IssueActivitiy类下的子明细集合,和IssueActivitiyDetail类下的自引用子集合都命名为IssueActivitiyDetails,可读性较差,容易造成维护混淆,建议将自引用的子集合改名为ChildDetails或Children,同步修改对应的FluentAPI配置即可。
内容的提问来源于stack exchange,提问作者Celal Poyraz
相关产品推荐
相关产品推荐

