PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Entity Framework ObjectContext -> chiamate SQL non elaborate a DBMS nativo

La risposta di Craig, anche se non ha funzionato così com'è, mi ha fatto guardare nella giusta direzione. Si scopre che c'è una proprietà EntityConnection.StoreConnection che ti fornisce una connessione al DBMS sottostante. Quindi eseguire SQL "nativo" è facile come questo:

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