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

What is the equivalent of entityEntry.Metadata.DefiningNavigationName() in EF Core 6?

我正在使用 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' 已过时:'Entity types with defining navigations have been replaced by shared-type entity types'

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

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

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

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

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