web-dev-qa-db-ja.com

Entity Framework Core 2.0でSQLコマンドを実行して、テーブル内のすべてのデータを削除する

Entity Framework Core 2.0からSQLコマンドを実行したいのですが、実行方法がわかりません。

1.-必要な理由は、データベーステーブルからすべてのデータを削除し、Context.removeまたはContext.removeRangeは、DBへの多くの呼び出しを生成します(テーブル内の各データに1つ)。

2.-メソッドがあることを読んだ.ExecuteSqlCommandそれを達成するために、しかしそのメソッドは私のContext.Databaseに存在しません(おそらくCore 2.0では削除されましたか?)。情報のソースは次のとおりです。 Entity Framework CoreおよびUWPのテーブルのドロップ

そのため、基本的に、EF Core 2.0を使用してコードからテーブルを削除する必要があり、私が知る限り、そのためのSQLコマンドを実行する必要があります。

ありがとうございました。

ここに私の.csprojがあります。念のために

<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

Microsoft.EntityFrameworkCoreを参照して、生のSQLコマンドを実行できるようにする必要なすべての拡張メソッドを含めるようにしてください。

ソースリポジトリからExecuteSqlCommandおよび関連する拡張メソッドを見つけました

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

ADO.Netの使用を提案する記事を見つけました。

最初に、コンテキストから接続を取得し、コマンドを作成して実行します。

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

これは、テーブルメソッドからの行ごとの削除のいずれに対しても実行されます。

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

TRUNCATE TABLEは、WHERE句のないDELETEステートメントに似ています。ただし、TRUNCATE TABLEはより高速で、使用するシステムおよびトランザクションログリソースが少なくなります。

ExecuteStoreCommand

テーブルの切り捨て

5
DanteTheSmith

Context.Database.ExecuteSqlCommandおよびContext.Database.ExecuteSqlCommandAsyncMicrosoft.EntityFrameworkCore.Relational名前空間。参照していることを確認してください。

その後、クラスで使用できるようになり、以下のように呼び出すことができます。

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