9

私はASP.NetMVC3と一緒にCodeFirstEntityFrameworkを勉強しています。最初は、些細なEFDbContextクラスがフォルダー内のWebUImvcプロジェクトに配置されていましたConcrete

 public class EFDbContext : DbContext
 {
     public DbSet<Product> Products { get; set; }
 }

そしてそれは

 public class EFProductRepository : IProductRepository
 {
    private EFDbContext context = new EFDbContext();

    public IQueryable<Product> Products
    {
        get
        {
            return context.Products;
        }
    }
 }

どこ

public interface IProductRepository
{
    IQueryable<Product> Products { get; }
}

そこで、ルートWeb.configに次のコードを追加しました。

 <connectionStrings>
      <add name="WebUI.Concrete.EFDbContext" connectionString="Data Source=HORGH\SQLSERVER2008;Initial Catalog=SportStore;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient"/>
 </connectionStrings>

そしてそれは働いた。

Domainそれから私はそれを別のクラスライブラリプロジェクトに取り入れることにしました。App.configファイルがあります。そこで、接続文字列をそこに移動することにしました。

<connectionStrings>
      <add name="Domain.Concrete.EFDbContext" connectionString="Data Source=HORGH\SQLSERVER2008;Initial Catalog=SportStore;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient"/>
 </connectionStrings>

しかし、最終的にEFはそれを見るのをやめました

EFProductRepositoryルートフォルダを使用してプロジェクトに移動EFDbContextしました。したがって、コンストラクターを呼び出すコードは、つまりプロジェクトにあります。DomainConcreteEFProductRepositoryDomain

App.configの名前をWeb.Configに変更しようとしました。WebUI接続文字列をプロジェクトのWeb.configに戻そうとしました。どちらも機能しません。

私は何が間違っているのですか?

4

2 に答える 2

20

クラスライブラリプロジェクトApp.configファイルが混在することはありません。

アプリケーションの構成ファイルは、常に実行可能ファイルに関連付けられており、web.configの場合はWebサイトに関連付けられています。

DLLプロジェクトは、独自の構成ファイル*を持つことはできません(また、持つべきではありません)。

代わりに、WebUIプロジェクトとともに接続文字列を構成します。複数の接続文字列エントリを持つことができます。

*実際にDLLに独自の構成ファイルを持たせる方法はいくつかあります。たとえば、NLogはそれを行います。ただし、それが良い考えになることはめったにありません。

于 2012-08-20T05:44:37.323 に答える
-1

なしで接続文字列名を使用するnamespace

<connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=HORGH\SQLSERVER2008;Initial Catalog=SportStore;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient"/>
</connectionStrings>
于 2012-08-20T06:52:43.050 に答える