实体框架代码首先尝试打开错误的数据库

时间:2012-01-26 21:47:22

标签: asp.net-mvc-3 entity-framework-4.1 connection-string sql-server-2008-r2 code-first

我正在编写一个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,并自动将我的模型属性映射到表列。 如果我禁用自动生成数据库功能,我会收到以下错误:

  

无法打开数据库“SportsStore.Domain.Concrete.EFDbContext”   登录要求

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

4 个答案:

答案 0 :(得分:2)

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

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

这是唯一与我的项目不同的东西。你确定这个班级&amp;连接字符串的命名完全相同?您是否尝试过像这样命名连接字符串?

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分: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使用我的,这一切都有效。