我正在尝试强制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可以在那里创建数据库)。
答案 0 :(得分:0)
SQL Server数据库引擎服务帐户必须具有在新文件夹中读/写的权限。
Attaching Database – Unable to Open Physical File (Access is Denied)