Фильтр EF Core 2.1 по типу - PullRequest
       81

Фильтр EF Core 2.1 по типу

0 голосов
/ 06 сентября 2018

Я работаю над проектом, который использует 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, но повлияет ли это на производительность, когда в нем будет больше записей? и есть ли обходной путь для этого.

1 Ответ

0 голосов
/ 18 сентября 2018

Вы ожидаете, что EF Core преобразует локальный клиентский код (не выражения) в код SQL, чего он не делает, и поэтому он говорит вам, что он будет оцениваться локально.

Я бы предложил реализовать преобразователь значений , где выражения ConvertToProviderExpression и ConvertFromProviderExpression могут обрабатывать сохранение и чтение вашей пользовательской логики из БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...