2012-08-03 26 views
2

我想按照這個教程:如何訪問實體框架中的context.Database.SqlQuery?

http://blogs.msdn.com/b/diego/archive/2012/01/10/how-to-execute-stored-procedures-sqlquery-in-the-dbcontext-api.aspx

,但似乎無法訪問此方法,它不會在智能影音意義上露面

context.Database.SqlQuery 

我現在用的是下面的代碼,但似乎無法訪問SqlQuery方法:

using(Entities db = new Entities()) 
{  
} 
+0

如果你嘗試編譯它,你得到任何錯誤訊息? – 2012-08-03 08:28:06

+0

您正在使用哪種版本的EF,即您的上下文('Entities')是DbContext還是objectcontext – 2012-08-03 08:35:52

+0

我正在使用ObjectContext – Funky 2012-08-03 09:13:03

回答

4

您所描述的方法是有效的executin g SQL與EF的DbContext版本。 (DbContext用於Code First,也可用於模型,但需要進行一些設置)。但在你的例子中,它應該是以下內容。

using(Entities db = new Entities()) 
{ 
    db.Database.SqlQuery(....); 
} 

如果您是第一次使用OOB模型(即EDMX),您可能正在使用的ObjectContext,在這種情況下,您將需要執行以下操作:

using(Entities db = new Entities()) 
{ 
    db.ExecuteStoreQuery<ReturnType>("..."); 
} 

參見:http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework-4.aspx

+0

ExecuteStoreQuery是否允許查詢返回輸出值? – Funky 2012-08-03 09:16:04

+0

可能但我不太確定確切的語法。如果你的輸出值是一個int或字符串,把它放到泛型參數中可能會給你你的結果,儘管我還沒有嘗試過。備選地,您可以創建一個POCO類來匹配響應類型並將其放入泛型中。還可能有一個版本返回對象。 – 2012-08-03 09:48:25

1
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", 
new object[] { param1, param2, param3 }); 

//或

using(var context = new MyDataContext()) 
{ 
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", 
new object[] { param1, param2, param3 }).ToList(); 
} 

//或

using(var context = new MyDataContext()) 
{ 
object[] parameters = { param1, param2, param3 }; 

return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", 
parameters).ToList(); 
} 

//或

using(var context = new MyDataContext()) 
{ 
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", 
param1, param2, param3).ToList(); 
} 
+0

它正在爲我裝配EntityFramework.dll,v4.4.0.0。 如果您使用的是(var context = new MyDataContext()),那麼.ToList()是必需的。 – Thulasiram 2012-10-18 15:17:12