2011-04-26 58 views
18

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

+2

创建一个与我的DbContext的类名完全相同的连接字符串 – Omu 2011-04-26 18:09:40

+0

。为什么这可能不起作用? – 2011-04-27 08:44:47

+4

嗯,我发现了这个问题。我在上下文构造器中设置数据库的名称,看起来如果有人这样做,那么它也必须是连接字符串的名称!请投票... – 2011-04-27 09:05:39

回答

0

右键单击您的Entity Framework模式(edmx文件)> goto Properties。你会在那里看到连接字符串。

如果您的实体模型在一个单独的项目中,那么它必须在它自己的设置文件中。

+0

我没有得到一个edmx文件,因为我使用Code First。我已经搜索了'connectionString',并且它不会出现在我的解决方案的其他地方! – 2011-04-26 12:47:38

2

约定>配置,对吧?

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

+0

是的,我认为这可能是这样的。那么如何让它在web.config中使用连接字符串,因为它似乎忽略了它? – 2011-04-26 13:54:24

+0

web.config中的连接字符串名称与DbContext类的名称相同吗?即如果你有 'public class MyContext:DbContext' 那么你的连接字符串需要命名为MyContext – 2011-04-30 15:22:21

0

如果您正在使用DbContext的codefirst aproach,您可以在web.config中放置一个名称与您的上下文类名称匹配的连接字符串,它将工作得很好。

+0

似乎并不适合我。我添加了一个连接字符串,其中一些垃圾已添加到“数据源”值,并且它一直保持正常工作... – 2011-04-26 14:52:30

+0

它应该只是一个sql连接字符串,名称attribut应该与您的上下文名称完全匹配 – 2011-04-26 15:06:46

1

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

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的名称。

+1

我想我已经完成了。我已将“服务器”值设置为IP地址,并将连接字符串的名称设置为派生上下文类的名称,但它应该只是忽略它! – 2011-04-26 15:42:08

+0

这应该被标记为答案 – reaz 2017-07-17 22:08:59

16

这里有一个我发现的“常规优化配置”哲学,当涉及到试图连接到现有数据库(就像你在做什么)。

如果您的DbContext类(例如Northwind)位于命名空间(例如MvcProject)中,由于某种原因,EF不会将名称与Web.config中名为“Northwind”(或“MvcProject .Northwind“),然后它只会创建一个默认为本地SQLEXPRESS实例的连接字符串,其数据库名为”MvcProject.Northwind“。这将是一个空的数据库。而且,当你意识到自己没有连接到正确的数据库时,你会想方设法弄清楚为什么你没有收到数据。

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

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

希望帮助别人那里;-)

+1

这一个解决了我的问题。谢谢 – fabriciorissetto 2014-03-22 21:58:52

+0

官方文档说你应该使用: base(“name = Northwind”) 我发现这是它的唯一工作方式。如果你测试“Forthwind”,你会发现它不会抛出异常,但是“name = Forthwind”会。 – Richard 2014-08-13 12:50:52

+0

我认为这是我的问题,但仍然可以指导我与我的问题http://stackoverflow.com/questions/42475840/entityframework-keeps-referring-to-a-copy-of-my-actual-database – Samra 2017-02-27 01:48:01

4

的EF couldn't找到我的连接,但是我用的连接字符串中的基础():

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

刚测试连接和它的工作。

+0

是的,它可以正常工作,但将连接字符串放入代码中被认为是不好的做法,例如,如果要在生产服务器中部署应用程序,则需要更改代码中的连接字符串,重新构建解决方案并再次发布。 – 2017-02-02 15:37:57

1

我面临同样的问题,并简单地改变我的连接字符串名称建议在web.config文件作为上下文db的名称,一切顺利。

相关问题