Вызов FromSql Не работает на IQueryable <TEntity>после миграции с Entity Framework core 2.2 на 3.0 - PullRequest
0 голосов
/ 06 октября 2019

Я строю свой запрос динамически, у меня есть метод, который получает IOrderedQueryable<T>, который является необязательным. Этот код прекрасно работал с EF Core 2.2, но остановился после миграции.

IQueryable<T> query;

if (spec.OrderedQueryable == null)
{
    query = DbContext.Set<T>()
                     .FromSqlRaw($"SELECT * FROM {tableName} WHERE RowVersion > @p0", new[] { lastRowVersion });
}
else
{
    query = spec.OrderedQueryable;
    query = query.FromSql($"SELECT * FROM {tableName} WHERE RowVersion > @p0", new[] { lastRowVersion });
}

В документах говорится, что FromSql был заменен на FromSqlRaw, это правда, это работает на DbSet, ноне на IQueryable<T>. Любые советы о том, как я могу добиться этого с EF Core 3.0?

1 Ответ

0 голосов
/ 06 октября 2019

Как я получил его из doc в ef core 3.0, вы не можете этого сделать.

До EF Core 3.0 метод FromSql мог быть указан в любом месте запроса.

Новое поведение

Начиная с EF Core 3.0, новые методы FromSqlRaw и FromSqlInterpolated (которые заменяют FromSql) можно указывать только в корнях запросов, т. Е. Непосредственно в DbSet <>. Попытка указать их где-либо еще приведет к ошибке компиляции.

Почему

Указание FromSql в любом месте, кроме DbSet, не имеет добавленного значения или дополнительного значения и можетв некоторых сценариях вызывает двусмысленность.

Смягчения

Вызовы FromSql следует перемещать так, чтобы они были непосредственно на DbSet, к которому они применяются.

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