Warm tip: This article is reproduced from serverfault.com, please click

c#-在Entity Framework Core 2.0中执行SQL命令以删除表中的所有数据

(c# - Execute SQL command in Entity Framework Core 2.0 to delete all data in a table)

发布于 2017-09-08 10:45:22

我想从Entity Framework Core 2.0中执行SQL命令,但是我不知道该怎么做。

1.-之所以需要这样做,是因为我想从数据库表中删除所有数据,并使用Context.removeContext.removeRange会产生许多对DB的调用(表中的每个数据一个)。

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>
Questioner
MorgoZ
Viewed
0
Nkosi 2017-09-08 20:07:53

确保引用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();
    }
}