Asp.net mvc EntityFramework-连接字符串在哪里?

Asp.net mvc EntityFramework-连接字符串在哪里?,asp.net-mvc,entity-framework-4,ef-code-first,Asp.net Mvc,Entity Framework 4,Ef Code First,我已经从web.config中删除了连接字符串,实体框架仍在连接到数据库!正在设置的连接字符串在哪里?这是一个问题,因为我需要使网站的实时版本指向实时数据库。右键单击实体框架模式(edmx文件)>转到属性。您将在那里看到连接字符串 如果您的实体模型位于单独的项目中,那么它必须位于自己的设置文件中。约定>配置,对吗 默认情况下,EF Code fist将在本地SQL express实例中创建一个数据库。如果您将codefirst aproach与DbContext一起使用,则可以在web.conf

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

右键单击实体框架模式(edmx文件)>转到属性。您将在那里看到连接字符串


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

约定>配置,对吗


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

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

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

您需要这样的东西:

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

MyContext
替换为扩展
DbContext

的类的名称。在尝试连接到现有数据库(就像您正在做的那样)时,我发现了一个“约定优先于配置”哲学的问题

如果您的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") {}
    }
}

希望这对其他人有所帮助;-)

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


只是为了测试连接,它就工作了。

我遇到了同样的问题,只是按照web.config文件中的建议将我的连接字符串名称更改为context db的名称,一切都很顺利。

我没有edmx文件,因为我先使用了代码。我已经搜索了“connectionString”,它在我的数据库中没有出现解决方案!是的,我认为可能是这样的。那么我如何让它使用web.config中的连接字符串,因为它似乎忽略了它?web.config中的连接字符串名称是否与DbContext类的名称相同?即,如果您有
公共类MyContext:DbContext
,则您的连接字符串需要名为MyContextE的e似乎对我不起作用。我添加了一个连接字符串,在“数据源”值中添加了一些垃圾,它继续工作…它应该只是一个sql连接字符串,名称属性应该与您的上下文名称完全匹配。我想我已经这样做了。我已将“服务器”值设置为IP地址和连接字符串的名称ng为派生上下文类的名称,但它似乎只是忽略了它!创建一个名为与DbContextI的类名完全相同的连接字符串。为什么这不起作用?我发现了问题。我在上下文构造函数中设置了数据库的名称,如果这样做,则必须设置o是连接字符串的名称!请投票…@IanWarburton:那么你没有在web.config中写任何东西吗?有指向我问题的链接。但是我尝试了你的解决方案,虽然不太清楚。仍然没有被接受的答案?!我想Omri的答案是正确的。官方文档说你应该使用:base(“name=Northwind”)我发现这是它工作的唯一方式。如果你测试“Forthwind”,你会发现它不会抛出异常,而是“name=Forthwind”“威尔。我想这是我的问题,但你仍然可以用我的问题来指导我,如果我想使用转换配置文件中包含的连接字符串,该怎么办?”?当我运行更新数据库命令时,它总是使用web.config文件,即使我选择了自定义配置。是的,它可以正常工作,但将connectionstring放入代码中被认为是一种不好的做法,例如,如果您想在生产服务器中部署应用程序,您需要更改代码中的connectionstring,重新生成解决方案并再次发布。
namespace MvcProject
{
    public class Northwind : DbContext
    {
        public Northwind() : base("Northwind") {}
    }
}
namespace MvcProject 
{     
    public class Northwind : DbContext     
    {         
        public Northwind() : 
            base("Data Source=servername;Initial Catalog=database;User ID=yourID;Password=yourPass;Trusted_Connection=False;") {}
    }
}