我正在使用 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/