实体框架正在尝试创建一个数据库,但它不是我想要的

时间:2012-03-07 09:25:09

标签: entity-framework-4 ef-code-first

我有一个小的asp.net mvc4应用程序(在我的本地机器上工作正常),它使用实体框架v4.1.0.0和ADO.net DbContext Generator。(SQL Server 2008 r2)

我正在通过Visual Studio 2010中的“Add Deployable Dependencies ...”上下文菜单添加所需的更新版本的dll。

我与godaddy.com共享托管,我已将文件上传到服务器并创建了数据库,现在问题就出现了。当我尝试浏览我的网站时,我收到以下错误:

在数据库'master'中拒绝CREATE DATABASE权限。

我仔细研究了一下,发现这个错误是由EF代码首次尝试创建数据库造成的。但我不希望EF代码首先重新创建数据库,如何关闭这个自动数据库创建完全?我无意使用代码优先功能。

请帮忙。

2 个答案:

答案 0 :(得分:23)

将此代码放入Global.asax的Application_Start()方法或DbContext类的构造函数

Database.SetInitializer<MyContext>(null);

如果要在更改POCO域时重新创建数据库,请使用以下代码而不是上面的代码

Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());

答案 1 :(得分:2)

如果您使用的是EF迁移,这就是您为此设置的内容:

public sealed class DbConfiguration : DbMigrationsConfiguration<DatabaseContext>
{
    public DbConfiguration()
    {
        AutomaticMigrationsEnabled = false;
    }
}

但这并没有回答关于EF Code First本身的问题。如果数据库已存在,则EF不会尝试创建它。所以你只需要将它指向现有的数据库。并确保连接字符串名称与数据库上下文的名称相同。如果不是,您需要提供一些覆盖:

public class DatabaseContext : DbContext
{
    public DatabaseContext() 
      : base(ApplicationParameters.ConnectionStringName)
    {
    }

    public DatabaseContext(string connectionStringName)
      : base(connectionStringName)
    {
    }

}