EF Code First - {"在数据库 'master' 中拒绝了 CREATE DATABASE 权限。"}

3

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

有什么最简单的方法可以解决这个问题吗?


您使用的登录账户是否具有dbcreator角色以连接到数据库? - user474407
4个回答

3
我曾经遇到过这个问题并解决了它。关键是使用 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的默认数据库从master更改为MFC,并将Integrated security设置为false。 顺便说一下,sa通常是禁用的,所以请先在SQL Server管理工具中启用并测试它。


我知道这是一篇旧帖子,但让我惊讶的是将连接字符串属性更改为Integrated Security=false对我来说是答案。设置是在本地运行IIS并在该服务器上运行SQLEXPRESS的服务器。尽管一切都设置好了,但无法让SQL服务器允许我的帐户创建数据库。对我来说,这是一篇很棒的帖子。谢谢! - Alan

2
这可能对于任何遇到此问题的人都有用,就像我一样,在寻找答案时,这些步骤应该就是你所需要的,我已经复制了代码,你可以粘贴它以快速运行。
我正在使用Code First,尝试使用“create-database”,但出现了标题中的错误。关闭并重新打开(这次作为管理员)-命令未被识别,但“update-database”被识别了。同样的错误。
下面是我解决它所采取的步骤:
1)打开SQL Server Management Studio并创建一个名为“Videos”的数据库。
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”以创建表。

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

        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();
        }

2

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


+1 - 也尝试以管理员身份运行Visual Studio。即使您自己的帐户具有管理员特权,在使用本地数据库进行开发时,我发现有必要在某些计算机上这样做。 - ChrisBD

0

我在使用EF 6.0和Code First时遇到了同样的问题。如果您有多个项目具有不同的连接字符串,并且从包管理器控制台运行update-database,即使选择了正确的默认项目,Visual Studio也会从启动项目读取连接字符串,因此如果该启动项目上没有连接,则会出现权限被拒绝的错误。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接