web-dev-qa-db-fra.com

Exécuter la commande SQL dans Entity Framework Core 2.0 pour supprimer toutes les données d'une table

Je souhaite exécuter une commande SQL à partir d'Entity Framework Core 2.0, mais je ne vois pas comment faire.

1.- La raison pour laquelle je dois, est que je veux supprimer toutes les données d'une table de base de données, et utiliser Context.remove ou Context.removeRange produirait de nombreux appels à DB (un pour chaque donnée de la table).

2.- J'ai lu qu'il existe une méthode .ExecuteSqlCommand pour accomplir cela, mais cette méthode n'est pas présente dans mon Context.Database (peut-être que dans Core 2.0 elle a été supprimée?). Voici la source de l'info: Suppression de la table dans Entity Framework Core et UWP

Donc, en gros, je dois supprimer une table du code en utilisant EF Core 2.0 et, autant que je sache, je dois exécuter une commande SQL pour cela.

Je vous remercie.

Voici mon .csproj, juste au cas où il me manque quelque chose

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />    
  </ItemGroup>

  <ItemGroup>
    <!--<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />    -->
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

</Project>
13
MorgoZ

Assurez-vous de référencer Microsoft.EntityFrameworkCore pour inclure toutes les méthodes d'extension nécessaires pour vous permettre d'exécuter des commandes SQL brutes.

Dans le référentiel source, j'ai trouvé ExecuteSqlCommand et les méthodes d'extension associées.

int count = await context.Database.ExecuteSqlCommandAsync("DELETE FROM [Blogs]");

Trouvé un article qui suggérait d'utiliser ADO.Net.

Vous devez d’abord saisir une connexion du contexte, créer une commande et l’exécuter.

using (var connection = context.Database.GetDbConnection()) {
    await connection.OpenAsync();     
    using (var command = connection.CreateCommand()) {
        command.CommandText = "DELETE FROM [Blogs]";
        var result = await command.ExecuteNonQueryAsync();
    }
}
21
Nkosi

Cela s'exécutera sur n'importe quelle méthode de suppression ligne par ligne des méthodes de table.

context.ExecuteStoreCommand("TRUNCATE TABLE [" + tableName + "]");

TRUNCATE TABLE est similaire à l'instruction DELETE sans WHERE clause; Cependant, TRUNCATE TABLE est plus rapide et utilise moins de système et ressources du journal des transactions.

ExecuteStoreCommand

TABLE TRUNCATE

5
DanteTheSmith

Context.Database.ExecuteSqlCommand et Context.Database.ExecuteSqlCommandAsync sont disponibles dans l'espace de noms Microsoft.EntityFrameworkCore.Relational. Assurez-vous d'avoir sa référence.

Ensuite, il sera disponible dans votre classe et vous pourrez l'appeler comme ci-dessous,

Context.ExecuteSqlCommand("TRUNCATE TABLE YOURTABLENAME");
0
Mohsin