实体框架接收拒绝访问,而普通SQL命令不接收

时间:2014-05-25 11:47:16

标签: entity-framework-6.1

我正在尝试强制Entity Framework在我想要的位置创建数据库,但它总是抱怨“拒绝访问”:

  

错误是:未处理的异常:(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命令 - 我现在正在创建数据库。 接下来我创建DB,我有它的名字。所以我喜欢这样:     var connectionString = String.Format(@“Data Source =。\ SQLEXPRESS; Integrated Security = SSPI; database = {0}”,dbName);     sqlConnection = new SqlConnection(connectionString);     使用(var db = new MyDbContext(sqlConnection,true)){       // EF创建数据库没有任何麻烦。     }

我尝试使用EF - 设置AttachDatabaseFile(无法记住参数的确切名称)。 EF确实尝试在提供的位置创建数据库,但它失败并显示Access denied错误。我尝试在连接字符串中使用args,但是我失败了,我不知道如何指向EF在特定文件夹的特定文件夹中创建数据库(确保SQL Server可以在那里创建数据库)。

1 个答案:

答案 0 :(得分:0)

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

Attaching Database – Unable to Open Physical File (Access is Denied)