从 EF Core 5 迁移到 EF Core 6 时出错

Posted

技术标签:

【中文标题】从 EF Core 5 迁移到 EF Core 6 时出错【英文标题】:Error on migrating from EF Core 5 to EF Core 6 【发布时间】:2022-01-15 07:19:18 【问题描述】:

从 EF Core 5 迁移到 EF Core 6 后,我的数据库模型出现问题。 在创建上下文时出现错误:字典中不存在给定的键。 示例应用程序仓库:https://github.com/testApp6/TestApp 有什么想法有什么问题或我该如何解决?

【问题讨论】:

【参考方案1】:

这看起来像一个错误。所以它应该作为一个问题提出here。

处理你的属性的反射代码被你的显式接口实现弄糊涂了:

[ForeignKey(nameof(PostTypeEnum))]
[InverseProperty(nameof(Model.PostType.Posts))]
public PostType PostType  get; set; 

[NotMapped]
PostTypeCommon IPost.PostType => PostTypeEnum.ToCommon();

要解决这个问题,只需从 Post 中删除该属性:

[Table(nameof(PostType))]
public class PostType

    [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
    public virtual PostTypeEnum Enum  get; set; 

    [MaxLength(20), Required]
    public virtual string Code  get; set; 

    //[InverseProperty(nameof(Post.PostType))]
    public virtual ICollection<Post> Posts  get; set; 

您已经在导航属性的另一侧配置了 InverseProperty,在 OnModelCreating 中。所以这里也不需要。

【讨论】:

感谢您的帮助 :) 已报告错误。

以上是关于从 EF Core 5 迁移到 EF Core 6 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将现有 Microsoft.AspNet.Identity DB (EF 6) 迁移到 Microsoft.AspNetCore.Identity (EF Core)

.NET 6 使用 EF CORE 进行迁移

EF Core从TPH迁移到TPT

EF Core 迁移过程遇到EF Core tools version版本不相符的解决方案

从 .NET Core 2.2 迁移到 3.1 后,EF Core 随机抓取 API 请求上的用户表

我可以使用 EF Core 5 InMemory 数据库进行集成测试吗