我已经使用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));
我有什么办法可以摆脱这个警告?