什么是entityEntry的等价物.元数据.在EF Core 6中定义NavigationName()



我使用的是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"已过时:"具有定义导航的实体类型已被共享类型实体类型所取代">

我找不到任何例子,也不知道如何将其更改为使用共享类型实体。

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

拥有的实体类型现在被实现为共享类型。所属实体类型的名称由所有者类型的名称+导航属性+类型名称组成。例如类似CCD_ 1的东西。

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

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

最新更新