EntityFramework - 连接字符串在哪里?

时间:2011-04-26 12:30:36

标签: asp.net-mvc entity-framework-4 ef-code-first

我从web.config中删除了连接字符串,Entity Framework仍然连接到数据库!连接字符串在哪里设置?这是一个问题,因为我需要将我的网站的实时版本指向实时数据库。

8 个答案:

答案 0 :(得分:16)

在试图连接到现有数据库时(例如你正在做的),我发现了“约会优于配置”理念。

如果您的DbContext类(例如Northwind)位于命名空间(例如MvcProject)中,由于某种原因,EF将不会将该类的名称与web.config中名为“Northwind”(或“MvcProject”的连接字符串)的名称相匹配。 Northwind“),然后它将创建一个连接字符串默认为本地SQLEXPRESS实例,其数据库名为”MvcProject.Northwind“。这将是一个空数据库。而且你会试图弄清楚为什么你没有得到任何数据,直到你意识到你没有连接到正确的数据库。

我解决这个问题的方式(不是优雅,但这是我发现修复它的最快方式):在DbContext类中添加一个构造函数,该类使用web.config中的连接字符串的名称调用base - 例如

namespace MvcProject
{
    public class Northwind : DbContext
    {
        public Northwind() : base("Northwind") {}
    }
}

希望帮助那里的人; - )

答案 1 :(得分:9)

你需要这样的东西:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

或者,如果您的数据库所在的是App_Data文件夹:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|YourDatabaseFilename.mdf;User Instance=True"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

MyContext替换为扩展DbContext的类的名称。

答案 2 :(得分:4)

EF无法找到我的连接,但我使用了base()中的连接字符串:

namespace MvcProject 
{     
    public class Northwind : DbContext     
    {         
        public Northwind() : 
            base("Data Source=servername;Initial Catalog=database;User ID=yourID;Password=yourPass;Trusted_Connection=False;") {}
    }
}  

只是测试连接并且它有效。

答案 3 :(得分:2)

会议&gt;配置,对吧?

默认情况下,EF Code拳头将在本地SQL Express实例中创建一个数据库。

答案 4 :(得分:1)

查看App.Config。它也将它存储在那里。

答案 5 :(得分:1)

我遇到了同样的问题,只是改变了web.config文件中建议的连接字符串名称作为上下文db的名称,一切顺利。

答案 6 :(得分:0)

右键单击您的实体框架模式(edmx文件)&gt;转到属性。你会在那里看到连接字符串。

如果您的实体模型位于单独的项目中,则它必须位于其自己的设置文件中。

答案 7 :(得分:0)

如果您使用DbContext的代码优先方法,您可以在web.config中放置一个名称与您的上下文类名匹配的连接字符串,它将正常工作。