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

时间:2011-10-06 09:46:28

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

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

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

4 个答案:

答案 0 :(得分: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的默认db从master设置为MFC,并且Integrated security = false。 BTW,sa通常是禁用的,所以首先在sql server management studio中启用并测试它。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

这可能对任何绊倒这个问题的人有用,正如我所做的那样,在寻找错误的答案时。这些步骤应该是您所需要的,我已经复制了代码,您可以粘贴以使其快速运行。

我正在使用Code First,尝试使用'create-database'但在标题中出错。 关闭并重新打开(作为管理员这次) - 命令无法识别,但“update-database”被如此使用。同样的错误。

以下是我解决它的步骤:

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

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

3)右键点击连接 - &gt;属性,并抓住连接字符串。

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)在Package Manager控制台中运行'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();
        }

答案 3 :(得分:0)

我首先遇到与EF 6.0和代码相同的问题。如果您有多个具有不同连接字符串的项目并且从包管理器控制台运行update-database,即使您选择了正确的默认项目,Visual Studio也会从启动项目中读取连接字符串,因此如果该启动时没有连接项目然后错误被许可拒绝..

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