[英]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”已過時:“具有定義導航的實體類型已替換為共享類型實體類型”
我找不到任何示例或了解如何將其更改為使用共享類型實體。
共享實體類型是使用通用 CLR 類型(類)的實體類型,由實體類型名稱標識(因為類型不夠用)。
擁有的實體類型現在實現為共享類型。 擁有實體類型名稱由擁有者類型名稱+導航屬性+類型名稱組成。 例如{Namespace}.{OwnerType}.{Navigation}#{OwnedType}
的東西。
因此,調整上述代碼的一種方法是檢查感興趣的實體的名稱並直接對其進行測試。 另一種更接近您之前所做的方法是檢查 CLR 類型,如果它是擁有的,則從所有者到擁有的導航屬性名稱(相當於“定義導航名稱”),可以使用FindOwnership().PrincipalToDependent.Name
獲得FindOwnership().PrincipalToDependent.Name
,例如類似
if (entityEntry.Metadata.ClrType == typeof(ArticleTag)
&& entityEntry.Metadata.FindOwnership()?.PrincipalToDependent?.Name != "Tags")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.