我试图强制实体框架在我想要的位置创建数据库,但它总是抱怨“访问被拒绝”:
错误是:未处理的异常:(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 可以在其中创建数据库本身)。