В Entity Framework Core 3 raw SQL отсутствуют методы - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь использовать EF Core 3 для удаления всех строк из таблицы, например:

db.MyTable.ExecuteSqlRaw("delete from MyTable;");

Но я получаю сообщение об ошибке:

DbSet 'не содержитопределение 'ExecuteSqlRaw' и недоступный метод расширения 'ExecuteSqlRaw', принимающий первый аргумент типа 'DbSet', может быть найден (вам не хватает директивы using или ссылки на сборку?)

MicrosoftСтраница критических изменений для EF Core 3 не дает никаких советов, если для этого необходимы специальные пакеты:

https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#fromsql-executesql-and-executesqlasync-have-been-renamed

Это установленные мной пакеты Nuget:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
<PackageReference Include="System.Linq" Version="4.3.0" />
<PackageReference Include="System.Linq.Expressions" Version="4.3.0" />
<PackageReference Include="System.Linq.Queryable" Version="4.3.0" />

Использование операторов:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;

Обратите внимание, что FromSqlRaw доступно, но ExecuteSqlRaw, ExecuteSqlRawAsync и т. Д. Нет.

EDIT : я добавил using Microsoft.EntityFrameworkCore, и ошибка изменилась на:

«DbSet» не содержит определения для «ExecuteSqlRaw» и лучшей перегрузки метода расширения «RelationalDatabaseFacadeExtensions.ExecuteSqlRaw (DatabaseFacade,строка, params объект [])это приемник типа 'DatabaseFacade'

Ответы [ 2 ]

1 голос
/ 23 октября 2019

У меня была похожая проблема с dbContext.Database.ExecuteSqlRaw (), и она была исправлена ​​установкой пакета Microsoft.EntityFrameworkCore.SqlServer, даже без использования пакета.

try install-package Microsoft.EntityFrameworkCore.SqlServer в вашем текущем проекте.

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

Мои изменения в отношении новой ошибки привели меня к ответу:

Документация Microsoft Breaking Changes просто не содержит примеров для методов Execute. Чтобы заставить это работать, вы должны вместо этого пройти через свойство «База данных». Короче говоря, чтобы использовать их:

  1. Убедитесь, что у вас есть using Microsoft.EntityFrameworkCore;
  2. Если вы используете команду execute, используйте myContext.Database.ExecuteSqlRaw(@"...sql to excxute...")
...