【问题标题】:Create tables on existing database在现有数据库上创建表
【发布时间】:2013-07-15 14:39:19
【问题描述】:

我正在将ASP.NET 项目部署到服务器,并将使用我无权创建数据库的mssql 服务器。

数据库已为我创建,我是他的所有者。

当我调用update-database 或运行应用程序时,它会尝试创建数据库并失败,原因是:

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

我喜欢 EF 来创建表格。

正常的初始化器是:

CreateDatabaseIfNotExists
DropCreateDatabaseWhenModelChanges
DropCreateDatabaseAlways

所有这些都创建了一个数据库,我没有权限这样做。

是否可以从Package Manager Console 类似update-database 创建表但不创建数据库?

编辑: 经过一番搜索,我发现:update-database -verbose -script 我可以使用它来生成我可以自己运行的表创建脚本。但不是像update-database这样的自动化方式

【问题讨论】:

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


    【解决方案1】:
    Database.SetInitializer<MyDbContext>(null);
    

    您也可以进入Configuration 类(继承自DbMigrationsConfiguration&lt;MyDbContext&gt;)并在构造函数中指定:

    AutomaticMigrationsEnabled = false;
    

    而且,正如您已经发现的那样,您可以使用-script 生成数据库脚本并自己运行它。

    【讨论】:

    • 我稍后会测试这个初始化,如果数据库确实存在并且为空该怎么办?
    • @Ofiris:假设 EF 通过了模式检查(并且可以访问 __MigrationHistory 表进行验证),它应该可以正常工作。
    • 如果方案发生变化怎么办?我无法运行update-database,因为它试图重新创建数据库。
    • @Ofiris:然后,您将再次使用 -script 标志生成更改脚本并将其应用于您的数据库。另一种选择是允许上下文帐户对数据库的完全所有者权限,并让 EF 为您处理它(它旨在对数据库进行无威胁的更改而不会丢失数据),这将使中间步骤脱离等式(同时还允许您在更改之间为数据库播种)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2011-12-20
    • 2022-06-16
    • 2021-09-04
    • 2015-04-22
    • 2019-12-24
    相关资源
    最近更新 更多