【问题标题】:EF 4.1 CF: CREATE DATABASE permission denied in database 'master'EF 4.1 CF:数据库“主”中的 CREATE DATABASE 权限被拒绝
【发布时间】:2011-04-07 16:41:03
【问题描述】:

Entity Framework 4.1 Code First 与SQLEXPRESS 上的localhost 配合得很好。不过,我现在已经准备好连接到普通的SQL 2008 server。

  1. 我创建了一个新数据库“NewEfDatabase”。

  2. 然后将Web.config 中的“ApplicationServices”connectionString 更改为指向具有集成安全性的新数据库。

然后我得到这个错误:

“CREATE DATABASE permission denied in database 'master'.”

所以...

a) EF 4.1 CF 在所述 SQL 服务器上需要哪些权限才能完成工作?

b) 我可以在SQL 2008 上为 EF 4.1 CF 设置一个空数据库,还是必须让它为我完成所有这些工作? (我不确定我的 DBA 是否愿意让我的 EF 应用程序有权在特定数据库之外执行任何操作)

【问题讨论】:

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


    【解决方案1】:

    您是否确保在代码中将数据库初始化程序设置为 null:

    Database.SetInitializer<MyDbContext>(null);
    

    如果初始化程序可能会尝试删除或创建新数据库,则所有内置实现。您收到的错误表明 EF 尝试删除/创建数据库,但在您的 SQL Server 实例中无权这样做。上面的行是通常避免这种情况的唯一选择,并且无论如何都适合(我认为甚至绝对必要)您不希望意外删除(由于模型更改或其他原因)的实时环境。

    【讨论】:

    • 不,我没试过。我会试一试。在这种情况下,我应该从本地 SQLEXPRESS 迁移我的数据和架构吗?我认为它可以在我的目标位置构建数据库。但是忘记了它执行的 drop-create 步骤。
    • @Dan:是的,如果您将初始化程序设置为null,则必须将数据库迁移到目标实例。在这种情况下,DB 架构和 EF 模型必须匹配,EF 不会更新或重新创建架构,如果架构和模型不匹配,可能会引发异常。
    • 我处理这个问题的方法是创建开发人员 PC 的名称列表,如果应用程序在其中一台 PC 上运行,我只调用 SetInitializer(重新创建数据库)。对于任何其他机器,我假设数据库已经部署在那里。
    • 我在这里提出了一个关于从开发迁移到迁移的步骤的新问题:stackoverflow.com/questions/5585446/…
    • Kyralessa:我喜欢这个概念。谢谢
    【解决方案2】:

    在 SQL Server 中为您的应用程序设置登录名。授予该用户 dbcreator 权限(通过右键单击登录名,转到服务器角色,然后选中“dbcreator”复选框)

    【讨论】:

      【解决方案3】:

      尽量不要使用windows集成的授权,就像我在这篇文章中回复的那样:EF Code First - {"CREATE DATABASE permission denied in database 'master'."}。 它对我有用。

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2016-12-17
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 2014-11-14
        相关资源
        最近更新 更多