0

我试图强制实体框架在我想要的位置创建数据库,但它总是抱怨“访问被拒绝”:

错误是:未处理的异常:(System.Data.SqlClient.SqlException)无法打开物理文件“D:\te_mp\zeliboba_odin.mdf”。操作系统错误 5:“5(拒绝访问。)”。

但是,如果我使用具有相同连接字符串的普通 SQL 命令 - 则 DB 已成功创建。

var createDbSql = String.Format(
                "CREATE DATABASE {0} ON PRIMARY (NAME = {0}_Data, FILENAME = '{1}.mdf', SIZE = 10MB, " +
                " FILEGROWTH = 10%)  LOG ON (NAME = {0}_Log,  FILENAME = '{1}.ldf',  SIZE = 1MB, FILEGROWTH = 10%) ",
                dbName, filename);

这两种情况有什么区别?为什么EF失败?

更新 1:第一个连接字符串是: var sqlConnection = new SqlConnection(@"Server=.\SQLEXPRESS;Integrated Security=SSPI;"); 这将工作将普通的 SQL 命令发送到服务器 - 我现在正在创建数据库。接下来我创建数据库,我有它的名字。所以我喜欢这样: var connectionString = String.Format(@"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;database={0}", dbName); sqlConnection = new SqlConnection(connectionString); using (var db = new MyDbContext(sqlConnection, true)) { // EF 创建数据库没有任何麻烦。}

我用 EF 尝试过的内容 - 设置 AttachDatabaseFile(不记得参数的确切名称)。EF 确实尝试在提供的位置创建数据库,但失败并出现访问被拒绝错误。我尝试在连接字符串中使用 args,但失败了,而且我不知道如何指向 EF 在具有特定文件名的特定文件夹中创建数据库(确保 SQL Server 可以在其中创建数据库本身)。

4

1 回答 1

0

SQL Server 数据库引擎服务帐户必须具有在新文件夹中读取/写入的权限。

附加数据库 - 无法打开物理文件(访问被拒绝)

于 2014-06-14T19:02:44.313 回答