c# - EF Core 6 中 entityEntry.Metadata.DefiningNavigationName() 的等效项是什么?

标签 c# entity-framework-core ef-core-5.0 ef-core-6.0

我正在使用 EF Core 5,我的 DBContext SaveChanges() 中有以下内容:

            if (entityEntry.Metadata.Name == "ArticleBankAggregate.ArticleTag" && entityEntry.Metadata.DefiningNavigationName != "Tags")
            {
                entityEntry.Property("UpdatedDate").CurrentValue = DateTime.Now;

                if (entityEntry.State == EntityState.Added)

                {
                    entityEntry.Property("CreatedDate").CurrentValue = DateTime.Now;
                }
            }

更新影子属性。

我正在尝试升级到 EF Core 6,但我得到以下信息:

CS0618:“IReadOnlyEntityType.DefiningNavigationName”已过时:“具有定义导航的实体类型已被共享类型实体类型取代”

我找不到任何示例或理解如何将其更改为使用共享类型实体。

最佳答案

共享实体类型是使用公共(public) CLR 类型(类)的实体类型,并由实体类型名称标识(因为类型不够)。

拥有的实体类型现在作为共享类型实现。拥有的实体类型的名称由所有者类型的名称 + 导航属性 + 类型名称组成。例如类似于 {Namespace}.{OwnerType}.{Navigation}#{OwnedType}

因此调整上述代码的一种方法是检查感兴趣的实体的名称并直接对其进行测试。另一种更接近您之前所做的方法是检查 CLR 类型,如果它被拥有,则从所有者到拥有的导航属性名称(相当于“定义导航名称”),这可以通过 获得FindOwnership().PrincipalToDependent.Name,例如像

if (entityEntry.Metadata.ClrType == typeof(ArticleTag)
    && entityEntry.Metadata.FindOwnership()?.PrincipalToDependent?.Name != "Tags")
 

关于c# - EF Core 6 中 entityEntry.Metadata.DefiningNavigationName() 的等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70794489/

相关文章:

c# - EF Core 和多个数据库

c# - 如何关闭 Entity Framework Core 5 中的所有约定

c# - Microsoft SQL Server 如何将数据从一个表复制到另一个表

c# - Google API OAuth 2.0 服务帐户 C# 第一次与每天使用

c# - 正则表达式仅匹配冒号后的小数

c# - EF Core 7 - 仅包含未删除的项目

c# - 在 Cosmos DB 中存储具有动态属性的对象

c# - 如何使用Net Core获取DbContext中的用户信息

entity-framework - EF核心2 : How to apply HasQueryFilter for all entities

.net - 如何在 ASP.NET 启动时重试运行 EFCore Migrate?