2017-02-17 87 views
1

不幸的是,我的EF應用程序必須調用我無法更改的存儲過程。雖然這並不理想,但我通常可以解決它。但是,我有一個存儲過程,返回任何東西。 EF核心如何處理這個問題?我知道在以前的版本中,您可以運行ExecuteNonQuery,但在EF Core中找不到類似的東西。實體框架核心可以運行非查詢調用嗎?

context.Set<T>() 
.AsNoTracking() 
.FromSql(query, args) 
.ToListAsync(); 

但是它看起來像設置始終需要一樣類型:

我通常是通過一個助手正因爲如此,其中T是映射到返回類型EF可序列化到一個類中運行我的查詢。查詢。我從背景中看到的其他東西都不會讓你做出不可查詢的調用。我錯過了什麼嗎?

我使用Microsoft.EntityFrameworkCore:1.2.0

回答

1

可以使用DbContext.DatabaseExecuteSqlCommand method

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 calls off the Context

using (var context = new SampleContext()) 
using (var command = context.Database.GetDbConnection().CreateCommand()) 
{ 
    command.CommandText = "DELETE From Table1"; 
    context.Database.OpenConnection(); 
    command.ExecuteNonQuery(); 
} 
+0

我明白了。謝謝你。我需要將Microsoft.EntityFrameworkCore.Relational包添加到我的項目中才能使其工作。 – evenflow58

+0

我上面概述的方法不依賴於Microsoft.EntityFrameworkCore.Relational。你必須在項目中需要它來做其他事情。 –