我正在与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停止看到它。
EFProductRepository
和EFDbContext
已移至Domain
项目及其根文件夹Concrete
。所以调用构造函数的代码在EFProductRepository
中,即在Domain
项目中。
我尝试将App.config重命名为Web.Config;试图将连接字符串返回到WebUI
项目的Web.config。它既不起作用也不起作用。
我做错了什么?
答案 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>