EF代码优先- {"CREATE DATABASE权限在DATABASE 'master'.&

本文关键字:DATABASE CREATE master 权限 quot 代码 EF | 更新日期: 2023-09-27 18:10:38

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

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

EF代码优先- {"CREATE DATABASE权限在DATABASE 'master'.&

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

按此方式尝试连接字符串:

<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管理工作室中启用并测试。

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

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

我使用代码第一,尝试使用'创建数据库',但得到了错误的标题。关闭并重新打开(这次作为管理员)-命令无法识别,但'update-database'被如此使用。同样的错误。

下面是我解决这个问题的步骤:

1)打开SQL Server Management Studio,创建数据库"Videos"

2)在VS2013中打开服务器资源管理器(在"视图"下)并连接到数据库。

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

4)在网上。我添加了连接字符串

   <connectionStrings>
<add name="DefaultConnection"
  connectionString="Data Source=MyMachine;Initial Catalog=Videos;Integrated Security=True" providerName="System.Data.SqlClient"
  />
  </connectionStrings>
在我设置上下文的地方,我需要引用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();
        }

我有同样的问题EF 6.0和代码第一。如果您有多个具有不同连接字符串的项目,并且在包管理器控制台上运行update-database,即使您选择了正确的默认项目,Visual studio也会从启动项目中读取连接字符串,因此如果启动项目上没有连接,则错误是permission denied..

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