我从web.config中删除了连接字符串,Entity Framework仍然连接到数据库!连接字符串在哪里设置?这是一个问题,因为我需要将我的网站的实时版本指向实时数据库。
答案 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中放置一个名称与您的上下文类名匹配的连接字符串,它将正常工作。