none
LINQ to SQLでPostgreSQLのASP.NET Dynamic Dataサイトを構築したい

    質問

  • LINQ to SQLでPostgreSQLのASP.NET Dynamic Dataサイトを構築する方法を模索しています。

    環境:

    Visual Studio 2008、.Net Framework 3.5、DBMS:PostgreSQL8.3、Npgsql 2.0.10.0、DBLinq 0.20.1

    背景:

    以前のスレッド(http://goo.gl/9iNuD)で、Npgsqlの最新バージョン2.0.11.91を使い、Entity FrameworkによるASP.NET Dynamic Dataサイト構築には成功したが、バージョン2.0.10.0では以下の事象が発生する。

    • テーブルの一覧表示後、テーブルを選択すると例外が発生する。"型 'Npgsql.NpgsqlFactory' のストア プロバイダ インスタンスの'GetService' メソッドを呼び出した後に NULL が返されました。ストア プロバイダが正しく機能していない可能性があります。"

    プロジェクトの事情でバージョン2.0.10.0のNpgsqlしか使用できないため、Entity Frameworkによるサイト構築はあきらめ、LINQ to SQLによるサイト構築を検証することにした。

    試したこと:

    基本的には 2010-03-17 - けさらんぱさらん に記載されている手順に沿って確認した。それ以外に以下の手順を追加した。

    • DbMetal.configを以下のように書き換えた。(書き換えないとエラーが発生する。"DbMetal: Could not load databaseConnectionType type 'Npgsql.NpgsqlConnection, Npgsql'.  Try using the --with-dbconnection=TYPE option.")

     

    <configuration>
     ~ 省略 ~
     <providers>
     <providers>
     ~ 省略 ~
      <provider
     name="PostgreSQL" 
     dbLinqSchemaLoader="DbLinq.PostgreSql.PgsqlSchemaLoader, DbLinq.PostgreSql" 
     databaseConnection="Npgsql.NpgsqlConnection, Npgsql, Version=2.0.10.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
     ~ 省略 ~
     </providers>
     </providers>
     ~ 省略 ~
    </configuration>
    

     

    • スタートページをDefault.aspxに設定

     

    結果:

    先のBlogと同じで「コンテキスト型 'Sample.XXXXXX' はサポートされません。 」の例外が発生した。(ソース ファイル: D:\ASP.NET\PAMasterl\PAMasterl\Global.asax.cs    行: 29 )

    この例外を解決してサイトを構築する方法をご存じでしたら教えてください。よろしくお願いします。

     


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/

    • 編集済み J.Hashimoto 2011年8月2日 5:18 リンクを修正
    2011年8月2日 4:59

回答

  • 以前のスレッド(http://goo.gl/9iNuD)で、Npgsqlの最新バージョン2.0.11.91を使い、Entity FrameworkによるASP.NET Dynamic Dataサイト構築には成功したが、バージョン2.0.10.0では以下の事象が発生する。

    • テーブルの一覧表示後、テーブルを選択すると例外が発生する。"型 'Npgsql.NpgsqlFactory' のストア プロバイダ インスタンスの'GetService' メソッドを呼び出した後に NULL が返されました。ストア プロバイダが正しく機能していない可能性があります。"

    プロジェクトの事情でバージョン2.0.10.0のNpgsqlしか使用できないため、Entity Frameworkによるサイト構築はあきらめ、LINQ to SQLによるサイト構築を検証することにした。

    J.Hashimotoさん、こんにちは!

    私も、LINQ to SQL で追試してみましたが、やはり同じエラーが出てしまいます。

    DBLinq 0.20.1 が生成するコードと、DbLinq.Data.Linq.DataContext クラスも少しだけ解析しましたが、SQL Server用のクラス(System.Data.Linq.DataContext) と比べても、メソッドが足りないというようなことはなかったので(当たり前ですが)、DBLinq側の実装に問題があるのでしょうか...

    ところで、J.Hashimotoさんは、上記のように、Npgsqlのバージョン2.0.10.0ではうまく行かなかったと報告していますが、私の環境では、うまく行きましたよ!

    私の環境は、次のとおりです。

    Windows XP x32 sp3

    Visual Studio 2008 sp1

    .NET Framework 3.5 sp1

    postgresql-8.3.15-1

    Npgsql2.0.10-bin-ms.net3.5sp1

     

    バージョン間の衝突などが起こらないようにするために、前回の環境とはまったく別に、仮想環境を新たに作成し、そこにVisual Studioのインストールなどから行いました。

    Npgsqlには、上記の ms.net3.5sp1 のほかに、Npgsql2.0.10-bin-ms.net.zip というのもありましたが、それでは試していません。

      


    名古屋ソフトウェアセンター 林広宣(MCT/MCPD)

    https://www.mcpvirtualbusinesscard.com/VBCServer/Lundi2/profile



    • 回答としてマーク J.Hashimoto 2011年8月14日 23:02
    2011年8月5日 7:33

すべての返信

  • 以前のスレッド(http://goo.gl/9iNuD)で、Npgsqlの最新バージョン2.0.11.91を使い、Entity FrameworkによるASP.NET Dynamic Dataサイト構築には成功したが、バージョン2.0.10.0では以下の事象が発生する。

    • テーブルの一覧表示後、テーブルを選択すると例外が発生する。"型 'Npgsql.NpgsqlFactory' のストア プロバイダ インスタンスの'GetService' メソッドを呼び出した後に NULL が返されました。ストア プロバイダが正しく機能していない可能性があります。"

    プロジェクトの事情でバージョン2.0.10.0のNpgsqlしか使用できないため、Entity Frameworkによるサイト構築はあきらめ、LINQ to SQLによるサイト構築を検証することにした。

    J.Hashimotoさん、こんにちは!

    私も、LINQ to SQL で追試してみましたが、やはり同じエラーが出てしまいます。

    DBLinq 0.20.1 が生成するコードと、DbLinq.Data.Linq.DataContext クラスも少しだけ解析しましたが、SQL Server用のクラス(System.Data.Linq.DataContext) と比べても、メソッドが足りないというようなことはなかったので(当たり前ですが)、DBLinq側の実装に問題があるのでしょうか...

    ところで、J.Hashimotoさんは、上記のように、Npgsqlのバージョン2.0.10.0ではうまく行かなかったと報告していますが、私の環境では、うまく行きましたよ!

    私の環境は、次のとおりです。

    Windows XP x32 sp3

    Visual Studio 2008 sp1

    .NET Framework 3.5 sp1

    postgresql-8.3.15-1

    Npgsql2.0.10-bin-ms.net3.5sp1

     

    バージョン間の衝突などが起こらないようにするために、前回の環境とはまったく別に、仮想環境を新たに作成し、そこにVisual Studioのインストールなどから行いました。

    Npgsqlには、上記の ms.net3.5sp1 のほかに、Npgsql2.0.10-bin-ms.net.zip というのもありましたが、それでは試していません。

      


    名古屋ソフトウェアセンター 林広宣(MCT/MCPD)

    https://www.mcpvirtualbusinesscard.com/VBCServer/Lundi2/profile



    • 回答としてマーク J.Hashimoto 2011年8月14日 23:02
    2011年8月5日 7:33
  • ところで、J.Hashimotoさんは、上記のように、Npgsqlのバージョン2.0.10.0ではうまく行かなかったと報告していますが、私の環境では、うまく行きましたよ!

    Lundi.hさん、わざわざ試してまで貴重な情報をありがとうございます。今は多忙で時間がとれないので、後日もう一度試してみます。


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    2011年8月8日 20:59
  • 本日ようやく検証の時間がとれました。結果から報告すると、Entity Frameworkでうまく行きました。

    Npgsql2.0.10-bin-ms.net3.5sp1.zipではなく、Npgsql2.0.10-bin-ms.net.zipを使用していたのが、原因でした。

     

    Lundi.hさん、ありがとうございました。

     


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    • 編集済み J.Hashimoto 2011年8月16日 1:08 追記
    2011年8月14日 23:02
  • J.Hashimotoさん、Entity Frameworkでうまくいったようで、よかったです。

    確か、Entity Frameworkは、.NET3.5 (sp1?)以降の機能なので、Npgsqlも、それに対応したバージョンを別途用意したのでしょうね。

     

     


    名古屋ソフトウェアセンター 林広宣(MCT/MCPD) https://www.mcpvirtualbusinesscard.com/VBCServer/Lundi2/profile
    2011年8月22日 0:16