2

複数のクライアント サイトで実行されるアプリケーションがあります。ロケーション (SQL Server、DB2、Oracle) で異なる DBMS をサポートする必要があります。アプリケーションを ODBC ベースのデータ レイヤーを使用する VC++ 6.0 から Visual Studio 2012 に変換していますが、Entity Framework (最初にデータベース) を使用したいと考えています。サンプル アプリケーションで実行時にデータベース プロバイダを変更する際に問題が発生しています。app.config の接続文字列を SQL Server から DB2 接続文字列に変更し、デフォルトの接続ファクトリを変更しました。プログラムを実行すると、データベースに接続できます (少なくともエラーは発生しません) が、linq の結果を反復処理すると例外が発生します。

タイプ「IBM.Data.DB2.DB2Connection」のオブジェクトをタイプ「System.Data.SqlClient.SqlConnection」にキャストできません

プログラムコードは次のとおりです。

    private void btnList_Click(object sender, EventArgs e)
    {
        using (var ListBill = new LB402_TestEntities())
        {
            var queryGroups = from Groups in ListBill.LB_Group
                                  select Groups.GroupName;

            foreach (string name in queryGroups)
            {
                lbGroups.Items.Add(name);
            }
        }
    }

app.config の変更部分は次のとおりです。

<defaultConnectionFactory type="IBM.Data.DB2.Entity.DB2ConnectionFactory, EntityFramework" />

<add name="LB402_TestEntities" connectionString="metadata=res://*/LB402.csdl|res://*/LB402.ssdl|res://*/LB402.msl;provider=IBM.Data.DB2;provider connection string=&quot;Server=db210:50000;Database=LISTBILL;uid=uuuuu;pwd=ppppp;&quot;" providerName="System.Data.EntityClient" />

私の検索と読書から、私はこれを行うことができるはずですが、明らかに何かが欠けています.

4

1 に答える 1

2

接続文字列を変更するだけでは不十分です。EDMX ファイルは 3 つの部分で構成され、1 つはプロバイダー固有 (接続文字列からの .ssdl 参照) です。サポートする必要があるすべてのデータベースにこの部分が必要であり、そのようなデータベースごとに EF プロバイダーが必要です。問題は、EDMX デザイナーが複数のプロバイダーのモデリングをサポートしていないことです。そのため、すべてのデータベースに個別の EDMX を用意する = 膨大な重複が必要になるか、他のデータベースの SSDL ファイル (XML) の保守を手動で開始する必要があります。

これらの障害がないため、コード ファースト マッピングと DbContext API を使用して小さな概念実証を作成する必要があります。SSDL は、コード マッピングと接続文字列で指定されたプロバイダーから実行時に生成されます。

于 2012-09-28T16:45:57.087 に答える