Asp.net mvc 实体框架代码优先-我如何告诉我的应用程序在开发完成后立即使用生产数据库,而不是创建本地数据库?

Asp.net mvc 实体框架代码优先-我如何告诉我的应用程序在开发完成后立即使用生产数据库,而不是创建本地数据库?,asp.net-mvc,database,ef-code-first,scaffolding,Asp.net Mvc,Database,Ef Code First,Scaffolding,我首先使用代码和实体框架5,使用MVC4和MVC脚手架(链接/教程:)从我的模型创建数据库。因此,基本上,当我运行应用程序时,如果我的模型发生变化,应用程序将删除并创建一个新的数据库。太好了。现在,很明显,这对当地的发展很有好处 但是当我的应用程序投入生产时呢?我如何告诉代码不要再这样做,而是让我的应用程序使用我在GoDaddy上托管的数据库?我将web.config中的连接字符串更改为指向GoDaddy数据库的连接字符串,但这不起作用。发生的情况是,代码仍然试图使用旧的连接字符串,原因我不知道

我首先使用代码和实体框架5,使用MVC4和MVC脚手架(链接/教程:)从我的模型创建数据库。因此,基本上,当我运行应用程序时,如果我的模型发生变化,应用程序将删除并创建一个新的数据库。太好了。现在,很明显,这对当地的发展很有好处

但是当我的应用程序投入生产时呢?我如何告诉代码不要再这样做,而是让我的应用程序使用我在GoDaddy上托管的数据库?我将web.config中的连接字符串更改为指向GoDaddy数据库的连接字符串,但这不起作用。发生的情况是,代码仍然试图使用旧的连接字符串,原因我不知道。我现在似乎无法让我的应用程序使用我在GoDaddy上创建的数据库。我开始后悔走代码优先的路线

下面是我的
应用程序\u Start
方法中的代码行,该方法自动生成我的数据库(在这种情况下,仅当我的模型更改时):


System.Data.Entity.Database.SetInitializer(新的System.Data.Entity.DropCreateDatabaseIfModelChanges());

我找到了解决问题的方法

最初,我在上下文的构造函数中有以下内容:

static CapWorxQuikCapContext()
{
    Database.SetInitializer(new CodeFirstSeeder.Xml.DropCreateDatabaseAlways<CapWorxQuikCapContext>());
}
这告诉我的应用程序查看名为“DefaultConnection”的连接字符串,并将其用作其数据源。

(根据我们的讨论/评论)

简单的规则是——

如果您有'non-static ctor'CapWorxQuikCapContext():base(“连接”)-那么您也必须在配置中使用相同的名称

否则-必须将连接字符串命名为与上下文类相同的名称-即与CapWorxQuikCapContext完全相同


如果您不这样做-EF/CF创建自己的“连接”路径-即创建一些默认的db名称-如您的上下文-或如您在ctor中拥有的那样

System.Data.Entity.Database.SetInitializer(null);它不会以任何方式修改数据库结构。无法将null作为参数传入,很遗憾……是的,您可以。不确定为什么您认为您不能。您的连接字符串在配置中是什么(在
connectionStrings
下)-您是否在
CapWorxQuikCapContext
中有ctor传递连接字符串?这似乎是一种联系issue@ChrisPratt现在,如果我显式地键入:System.Data.Entity.Database.SetInitializer(null)——这将作为编译时错误返回。无法从用法推断类型参数。
static CapWorxQuikCapContext()
{
    Database.SetInitializer(new CodeFirstSeeder.Xml.DropCreateDatabaseAlways<CapWorxQuikCapContext>());
}
public CapWorxQuikCapContext()
    : base("DefaultConnection")
{
}