代码之家  ›  专栏  ›  技术社区  ›  Mike Marks

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

  •  0
  • Mike Marks  · 技术社区  · 11 年前

    我正在使用代码优先和实体框架5,使用MVC4和MVC脚手架(链接/教程: http://www.codeproject.com/Articles/468777/Code-First-with-Entity-Framework-5-using-MVC4-and?msg=4531106#xx4531106xx )从我的模型中创建我的数据库。所以,基本上,当我运行应用程序时,如果我的模型发生变化,应用程序会删除并创建一个新的数据库。太棒了。现在,很明显,这对当地的发展非常有利。

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

    这是我的代码行 Application_Start 自动生成数据库的方法(在这种情况下,仅当我的模型发生更改时):

    System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<CapWorx.QuikCap.Models.CapWorxQuikCapContext>());
    
    2 回复  |  直到 11 年前
        1
  •  1
  •   Mike Marks    11 年前

    我找到了解决问题的办法。

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

    static CapWorxQuikCapContext()
    {
        Database.SetInitializer(new CodeFirstSeeder.Xml.DropCreateDatabaseAlways<CapWorxQuikCapContext>());
    }
    

    请注意,CodeFirstSeeder在这一点上无关紧要——它只是我安装的一种策略,用于对一些样本数据进行种子处理。无论如何,我把上面的改成了:

    public CapWorxQuikCapContext()
        : base("DefaultConnection")
    {
    }
    

    这告诉我的应用程序查看名为“DefaultConnection”的连接字符串,并将其用作数据源。

        2
  •  0
  •   NSGaga-mostly-inactive    11 年前

    (根据我们的讨论/意见)

    简单的规则是-

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

    否则,您必须将连接字符串命名为与Context类相同的名称 -即确切地CapWorxQuikCapContext。

    如果不这样做,则EF/CF会创建自己的“连接”路径,即创建一些默认的数据库名称,如上下文或ctor中的名称