【问题标题】:NonConfiguredNavigationToSharedType error from EF Core when upgrading to .NET 5升级到 .NET 5 时来自 EF Core 的 NonConfiguredNavigationToSharedType 错误
【发布时间】:2021-05-08 13:12:31
【问题描述】:

我刚刚测试了将一个项目从 .NET Core 3.1 升级到 .NET 5。但是在使用 DbContext 时遇到了以下错误:

System.InvalidOperationException:导航“MyDatabaseModel.SomeProperty”必须在“OnModelCreating”中配置为目标共享类型实体类型的显式名称,或通过调用“EntityTypeBuilder.Ignore”排除。

问题是我不明白这条错误消息试图告诉我什么。它抱怨的属性是这样定义的:

[Column("some_property", TypeName = "jsonb")]
public JsonDocument _someProperty { get; set; }

public Dictionary<string, object> SomeProperty
{
    get
    {
        // the JsonDocument is converted to the Dictionary here
    }
}

数据作为 JSONB 列存储在数据库中。有一些自定义代码可以将其转换为此处预期的应用程序 Dictionary&lt;string, object&gt; 类型。

但这不是错误消息声称的导航属性,它不链接到任何其他数据库实体。我不明白“目标共享类型实体类型”应该是什么。搜索这个特定的错误消息也没有提供任何线索,我找不到其他人遇到这个问题,只有在.NET中定义了错误字符串。

EF Core 究竟想在这里告诉我什么,它抱怨的实际问题是什么?我将如何应用它建议的解决方案,在 OnModelCreating 中配置它还是忽略它?

【问题讨论】:

    标签: c# .net-core entity-framework-core .net-5


    【解决方案1】:

    配置属性以便 EF 忽略它,例如 -

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SomeModel>().Ignore(p => p.SomeProperty);
    }
    

    或者,您可以通过添加 [NotMapped] 属性以声明方式执行相同的操作,例如 -

    [NotMapped]
    public Dictionary<string, object> SomeProperty
    {
        get
        {
            // the JsonDocument is converted to the Dictionary here
        }
    }
    

    【讨论】:

    • 这实际上并没有回答 OP 的问题
    【解决方案2】:

    也许稍后会修复。现在 - 只需定义类:

    public class SomePropertyType: Dictionary<string, object>{}
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2021-03-31
    • 2019-06-05
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多