在Entity Framework中运行SQL?

5

是否有办法直接从实体框架生成的调用中运行SQL语句?还是我必须创建一个存储过程,然后通过实体框架调用它?

4个回答

10

前几天我自己也在谷歌搜寻这个问题,这是我找到的一个示例,希望能有所帮助。

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

1
我建议在ObjectContext中使用ExecuteStoreCommand()而不是上面的ExecuteSql()。 - Carlo V. Dango

5
在EF 4.0中,这非常容易,因为 ObjectContext 上有新的方法,允许您直接执行存储命令(即SQL):

请参见:ExecuteStoreCommand

如果您仍在使用EF 3.5 SP1,则仍然可以像这样直接对数据库执行查询:

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

此时您已经可以访问到底层数据库的连接(dbconn),因此您可以使用普通的ADO.NET代码来执行查询等操作。

希望这可以帮助您

Alex


2

ExecuteStoreQuery<>ExecuteStoreCommand是你想要的:

using (NorthWindEntities ctx = new NorthWindEntities())
{
    ctx.ExecuteStoreQuery<>()
    ctx.ExecuteStoreCommand();
}

0

@Alex James,出于好奇,运行完整的文本SQL代码是否高效,也就是说不应该有性能开销对吧?换句话说,直接在SQL管理工具中将相同的完整文本SQL代码作为查询运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接