Jus*_*ant 4 .net postgresql ado.net entity-framework
我有一个使用ADO.NET实体框架的应用程序(VS2008版本,而不是更新,更酷的版本),我需要能够调用底层DBMS(它的postgres)以调用一些SQL实体框架不支持.
有没有办法从实体框架ObjectContext转到可以让我执行原始SQL的东西?(我需要在插入之前运行TRUNCATE TABLE)我可以使用hacky解决方案(例如从EF中提取DBMS的连接字符串信息,并使用它来使用postgres ADO.NET提供程序创建连接)但不要想要管理两组连接字符串(一个用于实体框架,一个用于ADO.NET).
我知道实体框架的第一个版本的限制,但是将这个应用程序切换到另一个ORM所需的投资是不值得的,并且使用EF 4.0也不是一个选项.
有任何想法吗?
顺便说一下,这是同样的问题,是否可以使用实体框架运行本机sql?,但该答案中描述的解决方法对我不起作用,因为我确实需要执行原始SQL.
Jus*_*ant 17
克雷格的答案虽然没有按原样发挥作用,但却让我朝着正确的方向前进.结果是有一个EntityConnection.StoreConnection属性,它可以获得与底层DBMS的连接.因此,执行"本机"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(); // open connection if not already open
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
finally
{
if (initialState != ConnectionState.Open)
conn.Close(); // only close connection if not initially open
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8673 次 |
| 最近记录: |