У меня InvalidCastException, несмотря на использование EF Core HasConversion - PullRequest
1 голос
/ 09 апреля 2020

В EF Core 2.1.3 я использую преобразование, но у меня есть InvalidcastException. Обратите внимание, что MyProperty имеет правильные приведения, требуемые кодом ниже.

В контексте:

builder.Entity<MyTable>().Property(o => o.MyProperty).HasMyPropertyConversion();

В некоторых классах расширений:

public static PropertyBuilder<MyProperty> HasMyPropertyConversion(this PropertyBuilder<MyProperty> property)
            => property.HasConversion(
                myProperty => (long)myProperty,
                value => (MyProperty)value);

Пример, который сбои:

public void ThisFails(long value)
{
    var _ = _myContext
                .MyTable
                .Where(x => x.MyProperty == value)
                .ToList();
}

Примеры работы:

public void ThisWorks()
{
    var _ = _myContext
                .MyTable
                .Where(x => x.MyProperty == 10L)
                .ToList();
}

public void ThisWorksAWell(long value)
{
    var _ = _myContext
                .MyTable
                .AsEnumerable()
                .Where(x => x.MyProperty == value)
                .ToList();
}

Ошибка:

System.InvalidCastException
Invalid cast from 'System.Int64' to 'MyProject.MyProperty'.

Похоже, генерация SQL с параметром завершается неудачей. Обратите внимание, что я не могу написать тест In-memory, который воспроизводит его.

ОБНОВЛЕНИЕ:

Я сделал repro как с локальными БД, так и с тестами БД в памяти.

UPDATE2:

Проблема решена в net core 3.0

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