【问题标题】:How to prevent EF from Creating database?如何防止EF创建数据库?
【发布时间】:2016-08-01 03:04:27
【问题描述】:


我正在尝试上传我的 Asp.net Mvc 网站。我使用了代码优先的方法。现在我在服务器上创建一个数据库并将我的文件上传到 Cpanel。但是当我打开网站时,我得到了这个错误:

数据库“master”中的 CREATE DATABASE 权限被拒绝。

我知道这是因为 EF,但我不知道如何解决它。
我试图关闭数据库初始化,但这确实有帮助。然后我尝试通过以下方式禁用迁移:

public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        ContextKey = "blah";
    }

但这也没有帮助。谁能帮帮我?

【问题讨论】:

  • EF 需要权限才能在服务器上创建数据库。
  • @SirwanAfifi 我没有权限。我需要阻止它创建数据库。
  • 将连接字符串指向现有数据库。如果您使用的是 Identity,则这些表需要存在。

标签: asp.net asp.net-mvc entity-framework ef-code-first entity-framework-migrations


【解决方案1】:

您可以像这样将初始化程序设置为 null:

public TestDBContext(): base("TestDBConnectionString") 
            {
                Database.SetInitializer<TestDbContext>(null);
            }

            public DbSet<TestEntity> TestEntities { get; set; }

【讨论】:

    【解决方案2】:

    CreateDatabaseIfNotExists:这是默认初始化程序。顾名思义,如果根据配置不存在数据库,它将创建数据库。但是,如果您更改模型类,然后使用此初始化程序运行应用程序,则会引发异常。

      public SchoolDBContext(): base("SchoolDBConnectionString") 
                {
                    Database.SetInitializer<SchoolDBContext>(new CreateDatabaseIfNotExists<SchoolDBContext>());
    
                    //Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseIfModelChanges<SchoolDBContext>());
                    //Database.SetInitializer<SchoolDBContext>(new DropCreateDatabaseAlways<SchoolDBContext>());
                    //Database.SetInitializer<SchoolDBContext>(new SchoolDBInitializer());
                }
                public DbSet<Student> Students { get; set; }
                public DbSet<Standard> Standards { get; set; }
    

    来源:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

    【讨论】:

    • 默认身份验证是否可能导致问题?因为我没有表或数据库。我刚刚在服务器上创建了自己的数据库。如果是,如何解决?
    猜你喜欢
    • 2021-08-10
    • 2011-12-24
    • 2015-09-27
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多