Mor*_*goZ 17 c# sql entity-framework-core asp.net-core-2.0
我想从Entity Framework Core 2.0执行一个SQL命令,但我无法弄清楚如何这样做.
1.-我需要的原因是,我想删除数据库表中的所有数据,并使用Context.remove或Context.removeRange将产生许多对DB的调用(表中的每个数据都有一个).
2.-我已经读过有一种方法.ExecuteSqlCommand可以实现这一点,但是我的Context.Database中没有该方法(可能在Core 2.0中它被删除了吗?).以下是信息的来源:实体框架核心和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>
Run Code Online (Sandbox Code Playgroud)
Nko*_*osi 24
确保您引用Microsoft.EntityFrameworkCore包含允许您执行原始SQL命令的所有必要扩展方法.
从我找到的源存储库ExecuteSqlCommand和相关的扩展方法
int count = await context.Database.ExecuteSqlCommandAsync("DELETE FROM [Blogs]");
Run Code Online (Sandbox Code Playgroud)
找到一篇建议使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
对于 EF Core 3.x,请使用此命名空间和此代码:
using Microsoft.EntityFrameworkCore;
...
context.Database.ExecuteSqlRaw("TRUNCATE TABLE [TableName]");
Run Code Online (Sandbox Code Playgroud)
这将执行表方法中每行的任何删除行.
context.ExecuteStoreCommand("TRUNCATE TABLE [" + tableName + "]");
Run Code Online (Sandbox Code Playgroud)
TRUNCATE TABLE类似于没有WHERE子句的DELETE语句; 但是,TRUNCATE TABLE更快,并且使用更少的系统和事务日志资源.
@Nkosi 是正确的,但从 EF Core 3.x 开始,您应该ExecuteSqlRaw像 @KevinDimey 所说的那样使用。
除了 @KevinDimey 的答案之外,还有过时的消息:
执行Sql命令:
要使用纯字符串执行 SQL 查询,请改用 ExecuteSqlRaw。要使用插值字符串语法来创建参数来执行 SQL 查询,请改用 ExecuteSqlInterpolated。
执行SqlCommandAsync:
对于使用纯字符串异步执行 SQL 查询,请改用 ExecuteSqlRawAsync。对于使用插值字符串语法创建参数的 SQL 查询的异步执行,请改用 ExecuteSqlInterpolatedAsync。
使用方法:
context.Database.ExecuteSqlRaw("DELETE FROM [Blogs]");
await context.Database.ExecuteSqlRawAsync("DELETE FROM [Blogs]");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17954 次 |
| 最近记录: |