Entity Framework Core可以运行非查询调用吗?

eve*_*w58 3 c# entity-framework entity-framework-core

不幸的是,我的EF应用程序必须调用我无法更改的存储过程。虽然这不是理想的,但我通常可以绕开它。但是,我有一个存储过程,它不会返回任何内容。EF核心如何处理?我知道在以前的版本中,您可以运行ExecuteNonQuery,但在EF Core中找不到类似的东西。

我通常通过这样的帮助程序来运行查询,其中T是映射到返回类型EF的类,可以将其序列化为:

context.Set<T>()
.AsNoTracking()
.FromSql(query, args)
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)

但是,看起来Set和.Query一样总是需要一种类型。我从上下文中看不见的其他任何东西都不会允许您进行不可查询的调用。我想念什么吗?

我正在使用Microsoft.EntityFrameworkCore:1.2.0

Mik*_*ind 6

您可以使用DbContext.DatabaseExecuteSqlCommand方法

using(var context = new SampleContext())
{
    var commandText = "INSERT Categories (CategoryName) VALUES (@CategoryName)";
    var name = new SqlParameter("@CategoryName", "Test");
    context.Database.ExecuteSqlCommand(commandText, name);
} 
Run Code Online (Sandbox Code Playgroud)

或者,您可以从Context还原为ADO.NET调用

using (var context = new SampleContext())
using (var command = context.Database.GetDbConnection().CreateCommand())
{
    command.CommandText = "DELETE From Table1";
    context.Database.OpenConnection();
    command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)