【问题标题】:EF Code First - {"CREATE DATABASE permission denied in database 'master'."}EF 代码优先 - {“数据库‘主’中的 CREATE DATABASE 权限被拒绝。”}
【发布时间】:2011-10-06 09:46:28
【问题描述】:

我只想在我的开发环境中快速启动默认数据库。

解决这个问题的最简单方法是什么?

【问题讨论】:

  • 您用于连接数据库的登录名是否具有 dbcreator 角色?

标签: c# sql-server-2008 entity-framework ef-code-first


【解决方案1】:

我曾经遇到过这个问题并解决了。关键是使用 SQL 身份验证而不是 Windows'。这是指定默认数据库的最清晰方法。

用这种方式尝试连接字符串:

<add name="MFCConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MFC.mdf;Initial Catalog=MFC;Integrated Security=false;User ID=sa;Password=123"
  providerName="System.Data.SqlClient" />

记得将 sa 的默认 db 从 master 设置为 MFC,并且 Integrated security = false。 顺便说一句,sa通常是禁用的,所以先在sql server management studio中启用并测试它。

【讨论】:

  • 我知道这是一篇旧帖子,但让我大吃一惊的是,将连接字符串属性更改为 Integrated Security=false 是我的答案。安装程序是在该服务器上运行带有 SQLEXPRESS 的 IIS 的本地服务器。即使一切都已设置,也无法让 SQL 服务器允许我的帐户创建数据库。对我来说很棒的帖子。谢谢!
【解决方案2】:

在有权在您的开发 SQL 服务器上创建数据库的帐户下运行您的应用程序。如果您使用 SQL 身份验证,请在具有此权限的连接字符串中指定 SQL 登录凭据。默认情况下,在 SQL Server 安装期间指定的管理员帐户具有此权限,但您也可以将其添加到其他登录。

【讨论】:

  • +1 - 也尝试以管理员身份运行 Visual Studio。即使您自己的帐户具有管理员权限,我也发现在使用本地数据库进行开发时,有必要在某些机器上执行此操作。
【解决方案3】:

这对于像我一样遇到这个问题的人在寻找错误答案时可能有用。这些步骤应该是您所需要的,我已经复制了代码,您可以粘贴以使其快速运行。

我使用 Code First,尝试使用“create-database”,但在标题中出现错误。 关闭并重新打开(这次作为管理员) - 命令无法识别,但使用了“更新数据库”。同样的错误。

以下是我为解决该问题所采取的步骤:

1) 打开 SQL Server Management Studio 并创建数据库“视频”

2) 在 VS2013 中打开服务器资源管理器(在“查看”下)并连接到数据库。

3) 右击连接->属性,抓取连接字符串。

4) 在 web.config 我添加了连接字符串

   <connectionStrings>
<add name="DefaultConnection"
  connectionString="Data Source=MyMachine;Initial Catalog=Videos;Integrated Security=True" providerName="System.Data.SqlClient"
  />
  </connectionStrings>

5) 在我设置上下文的地方,我需要引用 DefaultConnection:

using System.Data.Entity;

namespace Videos.Models
{
public class VideoDb : DbContext
{
    public VideoDb()
        : base("name=DefaultConnection")
    {

    }

    public DbSet<Video> Videos { get; set; }
}
}

6) 在包管理器控制台中运行“update-database”来创建表。

请记住,您可以在创建时使用 Seed() 在 Configuration.cs 中插入值:

        protected override void Seed(Videos.Models.VideoDb context)
        {
        context.Videos.AddOrUpdate(v => v.Title,
            new Video() { Title = "MyTitle1", Length = 150 },
            new Video() { Title = "MyTitle2", Length = 270 }
            );

        context.SaveChanges();
        }

【讨论】:

    【解决方案4】:

    我对 EF 6.0 和代码有同样的问题。如果您有多个具有不同连接字符串的项目并从包管理器控制台运行更新数据库,即使您选择了正确的默认项目,Visual Studio 也会从启动项目中读取连接字符串,因此如果启动时没有连接项目然后错误是权限被拒绝..

    您可以通过将正确的项目设置为启动项目来解决它(仅用于更新数据库)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2016-12-17
      • 2023-03-05
      • 1970-01-01
      • 2014-10-20
      相关资源
      最近更新 更多