实体框架4.1代码的SQL Server 2008连接字符串优先

时间:2011-07-04 20:53:37

标签: asp.net-mvc-3 configuration entity-framework-4 web-config entity-framework-4.1

我需要一个有效的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中找到的那种'老式'连接,它会错过元数据。

提前感谢您的帮助。

2 个答案:

答案 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>