[英]EF Core ValueObject comparison could not be translated and will be evaluated locally
我使用 DDD 和 EF Core 設計了我的域。
假設我的實體看起來像這樣:
public sealed class ArticleEntity
{
private ArticleEntity() { }
public ArticleId Id { get; private set; }
public string Name { get; private set; }
}
我的 ArticleId ValueObject 看起來像這樣:
public sealed class ArticleId
{
public ArticleId(int value)
{
Value = value;
}
public int Value { get; }
public static bool operator ==(ArticleId obj1, ArticleId obj2)
{
return (obj1 is null && obj2 is null)
|| (!(obj1 is null) && obj1.Equals(obj2));
}
public static bool operator !=(ArticleId obj1, ArticleId obj2)
{
return !(obj1 == obj2);
}
public override string ToString()
{
return base.ToString();
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
}
我使用這樣的查詢從存儲庫中獲取數據:
public ArticleEntity Get(ArticleId id)
{
return _context.Articles
.SingleOrDefault(a => a.Id == id);
}
當我瀏覽日志時,我看到這樣的條目:
20500|WARN|Microsoft.EntityFrameworkCore.Query|LINQ 表達式“where ([a].Id == __id_0)”無法翻譯,將在本地進行評估。
我已經為 ArticleId 參數設置了一個轉換,如下所示:
builder.Property(a => a.Id)
.HasConversion(
id => id.Value,
value => new ArticleId(value));
我能做些什么來擺脫這個警告嗎?
幸運的是,從 EF Core 2.2 遷移到 EF Core 3.0 解決了這個問題。 我現在找不到它,但在他們的 GitHub 問題跟蹤器上,他們提到該問題已在新版本中修復。
對於所有面臨相同問題的人 - 將 EF Core 更新到較新版本應該會有所幫助。 如果不知何故您無法更新 package 您可以嘗試更改數據庫上下文以在發生客戶端評估時顯式拋出異常並分別面對每個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.