1) Change the query to explicitly cast unknown types to built-in types
2) Change all Npgsql queries to forgo the use of binary encoding

The first solution dramatically complicates my queries, as the real tables have many columns. For example, using this solution changes all my queries from:

SELECT * FROM Foo

To:

SELECT Column1, Column2, Column3, Field1::TEXT, Column4 FROM Foo

This is clearly an unacceptable solution, since any number of changes (reordering columns, adding columns, dropping columns, changing column types, etc.) may require changing the query. The second solution is more maintainable, but requires more data to be sent to/from the server, which will result in a performance impact. Is there any other (read as: more maintainable) way to get Npgsql v3.0.0 to parse enumerated types?

If you are using case-insensitive naming in Postgres (e.g., didn't quote the Postgres data type), then you don't need to pass any parameters to the RegisterEnumGlobally, since the default value is the lowercase name of the C# type.