1

我在写一个ASP MVC 3应用程序。我为我的数据库使用Sql Server 2008 R2。实体框架代码首先尝试打开错误的数据库

我创建了我的数据模型,我的DbContext被称为EFDbContext。 我创建了我的数据库,名为SportsStore

我的连接字符串是:

<add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient" /> 

我运行应用程序,并没有数据显示。

我发现EF自动生成一个新的数据库SportsStore.Domain.Concrete.EFDbContext,但我希望它使用我以前创建的SportsStore,并自动将我的模型属性映射到表格列。 如果我禁用自动生成数据库功能,我得到以下错误:

Cannot open database "SportsStore.Domain.Concrete.EFDbContext" requested by the login

不宜实体框架试图打开SportsStore数据库?为什么它试图打开那个?我有错误的连接字符串吗?

+0

什么是您的EFDbContext类的构造函数看起来像?你把连接字符串传给它了吗?您可以将连接字符串传递给DBContext构造函数,或使用上下文类的名称在web.config文件中设置连接字符串。 http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx – Felix

回答

1

hmm.I得到同样的错误。经过一番努力,我意识到我把连接字符串放在错误的Web.config文件中。有两个Web配置文件。一个在view文件夹下,另一个在project.You需要在添加一个连接字符串的项目文件夹

2

奇怪...你有没有试过这个连接字符串?我认为你需要MARS来用DbContext做一些事情。

<add name="EFDbContext" connectionString="Data Source=LOCALHOST\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 

这些是唯一不同于我的项目之一,这项工作。您确定类&连接字符串的命名完全相同吗?你有没有尝试像这样命名连接字符串?

<add name="SportsStore.Domain.Concrete.EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient" /> 
+0

好吧我会尝试当我回家。我忘了说我的模型是在一个不同的项目中,所以它在一个单独的dll中。我认为从domain.dll开始工作的实体框架甚至没有阅读我的mvc应用程序中的web.config文件。也许我需要为domain.dll创建一个app.config并在那里设置我的连接字符串。 – Gonzalo

2

我可以给你一个建议。 当我在一个项目(通常是类库)中拥有我的DbContext和相应的连接字符串时,我遇到了类似的困难。但是,如果您在其他项目中使用win形式,它会忽略后者。它试图从启动项目的配置文件中获取连接字符串。

如果这是您的情况,请尝试将您的连接字符串放入启动项目配置文件中。

+0

我有一个mvc应用程序,这是我的启动项目,和domain.dll,我有我的模型。连接字符串位于mvc应用程序的web.config中。我认为它没有被读取,所以EF创建一个与我的上下文命名相同的新数据库。我会尝试在app.config中为domain.dll设置我的连接字符串,并查看会发生什么。 – Gonzalo

+0

我遇到了同样的问题。配置需要在启动项目中。 – aBetterGamer

1

我已经注释掉默认的连接字符串,放在我的下下:

<connectionStrings> 
<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcMovie-20130509163734;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-Mvc4Movie-20130509163734.mdf" providerName="System.Data.SqlClient" />--> 
<add name="MoveieDBContext" ... 

这使EF无视我的连接字符串,并生成自己的。取消注释默认连接使得EF使用我的并且一切正常。