我使用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);
}
}
我使用这样的查询从Repository获取数据:
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更新到新版本应该会有所帮助。如果您无法以某种方式更新包,您可以尝试更改DB上下文,以便在客户端评估发生时显式抛出异常,并分别面对每个问题。