PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Entity Framework ObjectContext -> appels SQL bruts au SGBD natif

La réponse de Craig, même si elle ne fonctionnait pas telle quelle, m'a fait regarder dans la bonne direction. Il s'avère qu'il existe une propriété EntityConnection.StoreConnection qui vous permet d'établir une connexion au SGBD sous-jacent. Exécuter du SQL "natif" est donc aussi simple que cela :

    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
        }
    }