EF Core 2.1 按拥有类型筛选
EF Core 2.1 filter by owned type
我正在开发一个使用 Entity Framework Cor 2.1 和 Aspnet Core Web API 的项目。
我有以下 ValueObject
public class Email
{
private string _value;
private Email(string value) => _value = value;
public static Email Create(string email)
{
//... code hidden for clarity
return new Email(email);
}
// I have overridden equality operators to check equality by the _value property
// and also ToString to return _value
}
我将此值对象配置为 Person 实体中的自有类型。
public class Person
{
//... code hidden for clarity
public virtual Email Email {get; private set;}
}
当我用
查询数据库时
_context.People.Where(person => person.Email == Email.Create("example@example.com");
我在控制台上收到以下警告。
The LINQ expression 'where ([person.Email] == __email_0)' could not be translated and will be evaluated locally.
我在Person中只有几条记录table,但是记录多了会影响性能吗?是否有解决方法。
您期望 EF Core 将本地客户端代码(不是表达式)转换为 SQL 代码,但它并没有这样做,这就是它告诉您它将在本地求值的原因。
我建议实施 value converter,其中 ConvertToProviderExpression
和 ConvertFromProviderExpression
表达式可以处理您自定义的逻辑存储和读取数据库。
我正在开发一个使用 Entity Framework Cor 2.1 和 Aspnet Core Web API 的项目。
我有以下 ValueObject
public class Email
{
private string _value;
private Email(string value) => _value = value;
public static Email Create(string email)
{
//... code hidden for clarity
return new Email(email);
}
// I have overridden equality operators to check equality by the _value property
// and also ToString to return _value
}
我将此值对象配置为 Person 实体中的自有类型。
public class Person
{
//... code hidden for clarity
public virtual Email Email {get; private set;}
}
当我用
查询数据库时_context.People.Where(person => person.Email == Email.Create("example@example.com");
我在控制台上收到以下警告。
The LINQ expression 'where ([person.Email] == __email_0)' could not be translated and will be evaluated locally.
我在Person中只有几条记录table,但是记录多了会影响性能吗?是否有解决方法。
您期望 EF Core 将本地客户端代码(不是表达式)转换为 SQL 代码,但它并没有这样做,这就是它告诉您它将在本地求值的原因。
我建议实施 value converter,其中 ConvertToProviderExpression
和 ConvertFromProviderExpression
表达式可以处理您自定义的逻辑存储和读取数据库。