不幸的是,我的 EF 应用程序必须调用我无法更改的存储过程。虽然这并不理想,但我通常可以绕过它。但是,我有一个确实返回任何内容的存储过程。 EF core 如何处理这个问题?我知道在以前的版本中您可以运行 ExecuteNonQuery 但我在 EF Core 中找不到类似的内容。
我通常通过这样的帮助器运行查询,其中 T 是映射到返回类型 EF 的类,可以序列化为:
context.Set<T>()
.AsNoTracking()
.FromSql(query, args)
.ToListAsync();
然而,看起来 Set 总是需要一个类型,就像 .Query 一样。我所见过的任何脱离上下文的东西都不允许您进行不可查询的调用。我错过了什么吗?
我正在使用 Microsoft.EntityFrameworkCore:1.2.0
您可以使用DbContext.DatabaseExecuteSqlCommand 方法 http://www.learnentityframeworkcore.com/raw-sql#database.executesqlcommand
using(var context = new SampleContext())
{
var commandText = "INSERT Categories (CategoryName) VALUES (@CategoryName)";
var name = new SqlParameter("@CategoryName", "Test");
context.Database.ExecuteSqlCommand(commandText, name);
}
或者您可以恢复到ADO.NET 调用关闭上下文 http://www.learnentityframeworkcore.com/raw-sql#ado.net-via-the-context.database-property:
using (var context = new SampleContext())
using (var command = context.Database.GetDbConnection().CreateCommand())
{
command.CommandText = "DELETE From Table1";
context.Database.OpenConnection();
command.ExecuteNonQuery();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)