Entity Framework で bit(8) の対応ができ・・・なかった。

ADO.NET Dynamic Data のために

前回で Edmgen で Npgsql から Entity Framework のコードを生成して ADO.NET Dynamic Data をやってみたわけだが、bit 型はサポート外だと言われてしまっていた。
まあ、bit 型ぐらいいいかと思ったが、うちのシステムは bit フラグを結構細かく使っている箇所もあるのでできればなんとかしたいという衝動にかられいろいろ調査してみた。
結論から言えば失敗したので成功例の欲しい人はここまでで次の検索結果に行ってください。

サポートされていないとはどういうことか?

サポートしていないのは Entity Framework や Edmgen ではなく、そのプロバイダを提供する側の方です。つまり今回は Npgsql がサポートしていないという事になります。
実際にソースを開いてみてみると bit が存在しない事がわかります。

  • %ソースのルート%/Npgsql/NpgsqlProviderManifest.cs
  • %ソースのルート%/Npgsql/NpgsqlProviderManifest.Manifest.xml

おそらく Edmgen はここに存在しない型は「サポート外」と判断しスキップするのだと思います。

さて困った

上記のソースを見ると分かるのですが、プロバイダが行っているのは、基本的に DB 側の型と .NET 側の型のマッピングに過ぎません。
試しに、bit を int32 にマッピングして Edmgen で生成すると確かに生成は上手くいきました。しかし、DB との接続では上手くいきません。そりゃそうです、postgresql 側のこっちが定義しているのは bit(8) なんです。でも Edmgen は DB から型情報を読むときは bit(8) の (8) を落として bit としか認識していないようで(かなりよく分かってななにので違う可能性はあります)、プロバイダからマッピング情報を探す時に bit で探そうとしてるみたいなんです。
(現に bit と int32 のマッピングが成立してるのでおそらくそう。)
しかし、いざ生成された Entity Framework のコードで DB に接続すると bit じゃなくて bit(8) だと怒られるわけですよ。

ここで完全に手詰まりになってしまいました。誰かお助けください。。