EntityFramework无法在App.config中看到ConnectionString

时间:2012-08-20 05:40:15

标签: c# asp.net-mvc-3 web-config ef-code-first connection-string

我正在与ASP.Net MVC 3一起研究Code First EntityFramework。 起初,我的小EFDbContext课程被放置在WebUI文件夹中的Concrete mvc项目中。

 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停止看到它

EFProductRepositoryEFDbContext已移至Domain项目及其根文件夹Concrete。所以调用构造函数的代码在EFProductRepository中,即在Domain项目中。

我尝试将App.config重命名为Web.Config;试图将连接字符串返回到WebUI项目的Web.config。它既不起作用也不起作用。

我做错了什么?

2 个答案:

答案 0 :(得分:18)

类库项目 App.config文件不混合。

应用程序的配置文件始终与可执行文件相关联,如果是web.config,则与网站相关联。

您的DLL项目不能(也不应该)拥有自己的配置文件*。

相反,请将连接字符串与WebUI项目一起配置。您可以拥有多个连接字符串条目。

* 实际上有一些方法可以使您的DLL实际上拥有自己的配置文件。 NLog就是这样做的。但是,这很少是一个好主意。

答案 1 :(得分:-1)

使用不带namespace

的连接字符串名称
<connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=HORGH\SQLSERVER2008;Initial Catalog=SportStore;Integrated Security=True;Pooling=False"
providerName="System.Data.SqlClient"/>
</connectionStrings>