是否有办法直接从实体框架生成的调用中运行SQL语句?还是我必须创建一个存储过程,然后通过实体框架调用它?
是否有办法直接从实体框架生成的调用中运行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();
}
}
ObjectContext
上有新的方法,允许您直接执行存储命令(即SQL):
如果您仍在使用EF 3.5 SP1,则仍然可以像这样直接对数据库执行查询:
var econn = ctx.Connection as EntityConnection;
var dbconn = econn.StoreConnection;
此时您已经可以访问到底层数据库的连接(dbconn),因此您可以使用普通的ADO.NET代码来执行查询等操作。
希望这可以帮助您
Alex
ExecuteStoreQuery<>
和ExecuteStoreCommand
是你想要的:
using (NorthWindEntities ctx = new NorthWindEntities())
{
ctx.ExecuteStoreQuery<>()
ctx.ExecuteStoreCommand();
}
@Alex James,出于好奇,运行完整的文本SQL代码是否高效,也就是说不应该有性能开销对吧?换句话说,直接在SQL管理工具中将相同的完整文本SQL代码作为查询运行。