【发布时间】:2011-10-25 07:07:30
【问题描述】:
我使用 EF 4.1 和 DB first 方法创建了一个新的 MVC 3 网站。我创建了 edmx 文件,然后创建了 DBContext(新的 4.1 功能)类。一切顺利。
然后,我使用 DBContext 的自动创建创建了新的控制器。一切都不是很好。
现在,我正在尝试启动网站,它不会连接到自己创建的连接字符串。
这是连接字符串:
<add name="PizzaByMeEntities"
connectionString='metadata=res://*/Models.PizzaByMeModel.csdl|
res://*/Models.PizzaByMeModel.ssdl|
res://*/Models.PizzaByMeModel.msl;
provider=System.Data.SqlClient;
provider connection string="data source=(local);
initial catalog=PizzaByMe;
integrated security=True;
pooling=False;
multipleactiveresultsets=True;
App=EntityFramework;"'
providerName="System.Data.EntityClient" />
当我启动网站时,我得到:
发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)
奇怪的是,如果我删除连接字符串 - 我仍然会得到完全相同的错误。我猜 EF 就是找不到连接字符串,即使它在那里。
有什么想法吗?
谢谢!
编辑:
我的DBContext如下:
public partial class PizzaByMeEntities : DbContext
{
public PizzaByMeEntities()
: base("name=PizzaByMeEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<X> Xs{ get; set; }
public DbSet<Y> Ys{ get; set; }
public DbSet<Z> Zs{ get; set; }
}
编辑 2:
有效的连接字符串是这样的:
<add name="PizzaByMe" connectionString="Data Source=(local);initial catalog=PizzaByMe;integrated security=True;pooling=False;multipleactiveresultsets=True;" providerName="System.Data.EntityClient" />
虽然让它工作 - 我只是使用直接 ADO.NET 连接。
【问题讨论】:
-
我建议的第一件事是验证此连接字符串是否正常(提供程序连接字符串,而不是整个实体)。也许将它转储到一个简单的 SqlConnection/SqlCommand/SqlDataReader 周围的测试页面或应用程序中,看看它是否连接。如果没有,那么你的问题就在那里。如果没问题,那么至少您知道问题出在 EF 或您的代码上,而不是您的数据库连接字符串。
-
我已经检查过了 - 工作正常。
-
您运行的是什么版本的 SQL Server?
-
@itsmatt - 我正在使用 SQL Server 2008 Express
-
好的,嗯。当我使用 Express SKU 时,我的数据源是一个命名的东西,例如“data source=.\SQLEXPRESS;” - 使用完整的 SQL Server,我的数据源现在类似于“data source=localhost” - 不知道这是否有帮助,但我的连接字符串肯定不同。也许它可以与命名实例一起使用。只是一个想法。
标签: asp.net-mvc-3 entity-framework-4.1