在實體框架中運行sql?

entity-framework

有沒有辦法直接從實體框架生成的調用運行sql語句?或者我是否必須創建一個過程然後通過實體框架調用它?

一般承認的答案

前幾天谷歌搜索這個,這是我發現希望它有幫助的例子

  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(); 
        }
    }

熱門答案

在EF 4.0中,這非常簡單,因為ObjectContext上有一些新方法允許您直接執行存儲命令(即SQL):

請參閱: ExecuteStoreCommand

如果您仍在使用EF 3.5 SP1,如果您真的想要這樣,您仍然可以直接對數據庫執行查詢:

var econn = ctx.Connection as EntityConnection;
var dbconn = econn.StoreConnection;

此時,您可以訪問底層數據庫的連接(dbconn),因此您可以使用普通的ADO.NET代碼來執行查詢等。

希望這可以幫助

亞歷克斯



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因