2017-09-08 13 views
6

Entity Framework Core 2.0からSQLコマンドを実行したいが、その方法を理解できない。Entity Framework Core 2.0でSQLコマンドを実行してテーブル内のすべてのデータを削除する

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

2.-私はそれを達成するためにメソッド.ExecuteSqlCommandがありますが、そのメソッドは私のContext.Databaseには存在しません(コア2.0では削除されたのでしょうか?)。 Dropping table In Entity Framework Core and UWP

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

ありがとうございます。ここで

はあなたが生のSQLコマンドを実行できるようになり、必要なすべての拡張メソッドが含まれるようにMicrosoft.EntityFrameworkCoreを参照していることを確認してください念のために私が何か

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

答えて

6

を欠けている、私の.csprojです。私は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(); 
    } 
} 
+1

参照が十分ではないこと。 'ExecuteSqlCommand [Async]'が定義されている 'Microsoft.EntityFrameworkCore.Relational'も参照する必要があります。 – MEMark

-2

あなたは、これは、テーブル方式から削除行あたりの行のいずれかを超える実行されます。この

context.Patients.ToList().ForEach(v => v.ChangeTracker.State = ObjectState.Deleted); 
context.SaveChanges(); 
+0

誰かがなぜこれを落としたのかと言うことができますか? – DanteTheSmith

+1

は私ではありませんでしたが、あなたのソリューションはObjectState.Deletedを持つ各エンティティごとに1つずつ、すべてのデータを削除する複数のクエリーを生成するためだと思います。それでは、あなたの答えは、EFコアからSQLコマンドを実行する方法ではなく、すべてのデータを削除する方法に答えています。 – MorgoZ

+0

私は投票をしなかったし、これは「うまくいく」だろう。しかし、経験から、あなたが削除すべき患者のリストが大量にある場合、これは永遠に実行することができることを伝えます。 sqlを使用して一括削除を実行する方がはるかに優れています。 – CaseyC585

関連する問題