有沒有什麼辦法可以直接從實體框架生成的調用中運行sql語句?或者我將不得不創建一個過程,然後通過實體框架調用該過程?在實體框架中運行sql?
5
A
回答
10
當時我周圍的Googling這個前些天,這是我找到了希望它能幫助
static void ExecuteSql(ObjectContext c, string sql)
{
var entityConnection = (System.Data.EntityClient.EntityConnection)c.Connection;
DbConnection conn = entityConnection.StoreConnection;
ConnectionState initialState = conn.State;
try
{
if (initialState != ConnectionState.Open)
conn.Open();
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
finally
{
if (initialState != ConnectionState.Open)
conn.Close();
}
}
5
在EF 4.0,這是很容易的,因爲有對ObjectContext
,讓您直接執行存儲命令(即SQL)的新方法:
看到這個:ExecuteStoreCommand
如果你還在使用EF 3.5 SP1仍然可以在數據庫中直接執行查詢,如果你真的想這樣的:
var econn = ctx.Connection as EntityConnection;
var dbconn = econn.StoreConnection;
在這一點上可以訪問到底層數據庫的連接(dbconn),所以你可以使用正常ADO.NET代碼來執行查詢等
希望這有助於
亞歷
0
@Alex詹姆斯,出於好奇,就這樣被有效運行的代碼全文SQL位,如應該沒有性能開銷嗎?說,直接運行相同的全文sql代碼作爲查詢在SQL管理工作室。
1
ExecuteStoreQuery<>
和ExecuteStoreCommand
的例子中,你想要什麼:
using (NorthWindEntities ctx = new NorthWindEntities())
{
ctx.ExecuteStoreQuery<>()
ctx.ExecuteStoreCommand();
}
我會建議使用ObjectContext中的ExecuteStoreCommand()而不是上面的ExecuteSql() – 2011-03-12 23:50:42