web-dev-qa-db-ja.com

クラスライブラリプロジェクトでエンティティフレームワークを構成する方法

私は、複数のプロジェクトの共通データアクセスレイヤーを担当するエンティティフレームワークオブジェクトを含むクラスライブラリプロジェクトを作成しました。生成されたDLLファイルをドメインプロジェクトに追加し、クラスライブラリプロジェクトのエンティティオブジェクトを使用した後、次の問題。

「ABC」という名前の接続文字列がアプリケーション構成ファイルで見つかりませんでした。

edmxのMetadata Artifact処理プロパティをEmbed in Output Assemblyに設定しました

App.Configマークアップ

  <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="ABC" connectionString="metadata=res://*/Entity.ABC.csdl|res://*/Entity.ABC.ssdl|res://*/Entity.ABC.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\ABC.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

エンティティコードは次のとおりです

public ABC_IntegrationEntities()
            : base("name=ABC")
        {
        }

datadirectiory "App_Data"からデータベースにアクセスしているもう1つのこと

dotnetcurry.comのブログを参照しています。

http://www.dotnetcurry.com/showarticle.aspx?ID=617

前もって感謝します!

13
Nik's

リンク に基づいて、おそらくこの部分を逃します。

これで、このプロジェクトで独自の.configファイルを作成して、モデルの接続文字列エントリを追加するか、または単にのいずれかを行うことができますMyEntityModelプロジェクトのConsole Appプロジェクトに作成したApp.configファイルをコピーします。より簡単な方法を採用します。プロジェクトを右クリック>既存のアイテムを追加> MyEntityModelプロジェクトに移動し、App.configファイルを追加します。

説明:

ライブラリを作成し、そのライブラリが別のプロジェクトから参照されている場合、EFはプロジェクトの起動に関連する構成を読み取ります。次のいずれかを実行できます。

  • ライブラリの設定から設定をコピーします(ファイルをコピーして貼り付け、プロジェクトを開始します)
  • 新しい構成を作成しますが、接続文字列情報と他のEF関連セクションをコピーします
  • 既存の項目を追加して既存の構成を追加し、ライブラリの構成へのリンクとして追加します
8
Yuliam Chandra

私はすべてのEF(Entity Framework)機能を実装するクラスライブラリの作成に取り組んでおり、 http://www.dotnetcurry.com/showarticle.aspx?ID=617 で説明されているプロセスに従いましたが、それでもエラーを出していた。

問題は、EFフレームワークと.Netフレームワーク間のバージョンの不一致でした。 .Net Framework 5.0を使用していましたが、EFのバージョンは6.0でした。 .Netフレームワークの最新バージョンを更新した後、すべてが正常に動作し始めました。 EFおよびDLLバージョン+ EFおよびテストプロジェクトのバージョンが常に同じであることを常に確認してください。

EFTools6.1.3ForVS2013もダウンロードしてインストールしました。他に覚えておくべきことは、EF Dllを参照するすべてのプロジェクトにNugetからEntity Frameworkをインストールし、テストプロジェクトの構成ファイルのDll構成ファイルから接続文字列をコピーする必要があることです。

これが誰かを助けることを願っています!!!おかげで、

1
Anki

ライブラリプロジェクトの構成ファイルからSQL接続文字列をコピーし、スタートアッププロジェクトであるメインプロジェクトの構成ファイルに貼り付けます。これで問題が解決します。

また、DbProviderFactoriesをライブラリプロジェクトからメインプロジェクトの構成ファイルにコピーします。

1
Nikhil Dinesh

コンテキストクラスのコンストラクターで使用しているエンティティ接続文字列の名前を変更します。

public ABC_IntegrationEntities()
                : base("name=Gumu_IntegrationEntities")
            {
            }

アプリケーション構成ファイルがコードを実行するアセンブリに追加されていることを確認してください。つまり、app.configのPEのweb.configのウェブサイト

0
Andrew