我需要一个有效的SQL Server 2008连接字符串,用于Entity Framework 4.1代码优先项目。我现在将它与MVC 3一起使用。
目前它仍然很简单,只有1个项目,3个简单的模型类......
我只能找到其他所有东西,比如Sql Express,网络上的CE连接......
在web.config
(“ApplicationServices”)中按名称查找它是可以的,因为当我尝试使用时,我得到了特定的错误。
我能得到的最好的是:
无法加载指定的元数据 资源。
我试图像metadata=res://MyWebProject/MyWebProject.csdl| ...
那样给它,但没有成功。
所以它不会为我创建数据库 - 即使没有点击OnModelCreating(DbModelBuilder modelBuilder)
方法。
如果我尝试使用像我在SQL Server Express中找到的那种'老式'连接,它会错过元数据。
提前感谢您的帮助。
答案 0 :(得分:34)
“Code-First”的概念是,您不必处理连接字符串中提到的.csdl,.ssdl和.msl文件。如果未在其他地方指定,DbContext将按照您的描述在web.config中查找连接字符串。 DbContext类的构造函数将接受一个名称 - 值对,指定web.config中连接字符串的名称。例如:
<connectionStrings>
<add name="ConnectionName"
providerName="System.Data.SqlClient"
connectionString="Server=ServerName;Database=DatabaseName;Integrated Security=True;" />
</connectionStrings>
可以在您的上下文中引用:
class MyContext : DbContext
{
public MyContext() : base("name=ConnectionName") { }
...
}
我提供的示例连接字符串实际上是用于SQL Server数据库。指定ProviderName非常重要,因为“Code-First”要求它生成相应的.ssdl-File(存储架构)。
答案 1 :(得分:3)
此外,您可以在DbContext类之后命名连接字符串。在这种情况下,您可能不会提及连接字符串的名称
class MyContext : DbContext
{
//public MyContext() : base("name=ConnectionName") { } // not needed
...
}
,连接字符串是下面的
<connectionStrings>
<add name="MyContext"
providerName="System.Data.SqlClient"
connectionString="Server=ServerName;Database=DatabaseName;Integrated Security=True;" />
</connectionStrings>