web-dev-qa-db-fra.com

Méthodes SQL brutes Entity Framework Core 3 manquantes

J'essaie d'utiliser EF Core 3 pour supprimer toutes les lignes d'une table comme:

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

Mais je reçois l'erreur:

DbSet 'ne contient pas de définition pour' ExecuteSqlRaw 'et aucune méthode d'extension accessible' ExecuteSqlRaw 'acceptant un premier argument de type' DbSet 'n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)

La page des modifications de rupture de Microsoft pour EF Core 3 n'offre aucun conseil sur la nécessité de packages spéciaux pour l'activer:

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

Voici les packages Nuget que j'ai installés:

<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" />

Utilisation de déclarations:

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

Notez que FromSqlRaw est disponible, mais ExecuteSqlRaw, ExecuteSqlRawAsync, etc. ne le sont pas.

[~ # ~] modifier [~ # ~] : j'ai ajouté un using Microsoft.EntityFrameworkCore et l'erreur a changé en:

'DbSet' ne contient pas de définition pour 'ExecuteSqlRaw' et la meilleure surcharge d'extension de méthode 'RelationalDatabaseFacadeExtensions.ExecuteSqlRaw (DatabaseFacade, chaîne, objet params [])' nécessite un récepteur de type 'DatabaseFacade'

3
FirstDivision

Mon montage sur la nouvelle erreur m'a conduit à une réponse:

La documentation de Microsoft Breaking Changes ne fournit tout simplement pas d'exemples pour les méthodes d'exécution. Pour que cela fonctionne, vous devez passer par la propriété "Database" à la place. Bref, pour les utiliser:

  1. Assurez-vous d'avoir using Microsoft.EntityFrameworkCore;
  2. Si vous utilisez une exécution, utilisez myContext.Database.ExecuteSqlRaw(@"...sql to excxute...")
0
FirstDivision

Vous devez ajouter la référence du package NuGet Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions à votre projet.

0
CXuesong