在实体框架中运行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代码来执行查询等。

希望这可以帮助

亚历克斯



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因