PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Entity Framework ObjectContext -> rohe SQL-Aufrufe an natives DBMS

Craigs Antwort, obwohl sie so wie sie ist, nicht funktionierte, brachte mich dazu, in die richtige Richtung zu schauen. Es stellt sich heraus, dass es eine EntityConnection.StoreConnection-Eigenschaft gibt, die Ihnen eine Verbindung zum zugrunde liegenden DBMS verschafft. So einfach ist die Ausführung von "nativem" 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
        }
    }