webentwicklung-frage-antwort-db.com.de

Führen Sie den SQL-Befehl in Entity Framework Core 2.0 aus, um alle Daten in einer Tabelle zu löschen

Ich möchte einen SQL-Befehl aus Entity Framework Core 2.0 ausführen, aber ich kann nicht herausfinden, wie ich das ausführen kann.

1.- Der Grund, warum ich das tun muss, ist, dass ich alle Daten aus einer Datenbanktabelle löschen möchte und mit Context.remove oder Context.removeRange viele Aufrufe an die DB (einen für jede Daten in der Tabelle) erzeugen würde.

2.- Ich habe gelesen, dass es eine Methode .ExecuteSqlCommand gibt, um das zu erreichen, aber diese Methode ist in meiner Context.Database nicht vorhanden (vielleicht wurde sie in Core 2.0 entfernt?). Hier ist die Quelle der Informationen: Löschen der Tabelle in Entity Framework Core und UWP

Im Grunde muss ich eine Tabelle mit EF Core 2.0 aus dem Code löschen und, soweit ich weiß, einen SQL-Befehl dafür ausführen.

Vielen Dank.

Hier ist mein .csproj, nur für den Fall, dass mir etwas fehlt

<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

Stellen Sie sicher, dass Sie auf Microsoft.EntityFrameworkCore verweisen, um alle erforderlichen Erweiterungsmethoden einzuschließen, mit denen Sie rohe SQL-Befehle ausführen können.

Im Quell-Repository fand ich ExecuteSqlCommand und verwandte Erweiterungsmethoden

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

Einen Artikel gefunden, der die Verwendung von ADO.Net vorschlug.

Zuerst greifen Sie eine Verbindung aus dem Kontext auf, erstellen einen Befehl und führen diesen aus.

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

Dies führt zu einem Löschen von Zeilen pro Zeile aus Tabellenmethoden.

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

TRUNCATE TABLE ähnelt der DELETE-Anweisung ohne WHERE Klausel; TRUNCATE TABLE ist jedoch schneller und verwendet weniger System und Transaktionsprotokollressourcen.

ExecuteStoreCommand

TRUNCATE TABLE

5
DanteTheSmith

Context.Database.ExecuteSqlCommand und Context.Database.ExecuteSqlCommandAsync sind im Microsoft.EntityFrameworkCore.Relational-Namespace verfügbar. Stellen Sie sicher, dass Sie eine Referenz haben.

Dann wird es in Ihrer Klasse verfügbar sein und Sie können es wie folgt anrufen:

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