13

我需要一个有效的SQL Server 2008连接字符串实体框架4.1代码优先项目。我将与MVC 3实体框架SQL Server 2008连接字符串4.1代码优先

现在用它现在它仍然很简单,只有1个项目,3个简单的模型类...

我只能找到一切,如SQL Express,则在CE连接web ...

web.config(“ApplicationServices”)中查找名称是可以的,因为当我尝试使用时,我得到了特定的错误。

我能得到的最好的是:

无法加载指定的元数据 资源。

我试图给它像metadata=res://MyWebProject/MyWebProject.csdl| ...也没有成功。

因此它不会为我创建数据库 - 即使没有打到OnModelCreating(DbModelBuilder modelBuilder)方法。

如果我尝试使用像SQL Server Express那样的'老式'连接,它会错过元数据。

感谢您的帮助提前。

回答

34

“代码优先”的想法是,你不应该处理连接字符串中提到的.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(存储模式)。

+0

谢谢,这是我需要的。 – DavidR

+0

此主题是一个救星。 –

+0

如果数据库架构不存在,并且我正在使用sql server 2008,代理会自动创建数据库吗? –

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> 
相关问题