我正在尝试使用C#中的Entity Framework 5在MVC3 Web应用程序中执行此操作:
// Local DB connection
var dbId = String.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename={0}.mdf;Database=Tests;Integrated Security=True;Pooling=False;Connect Timeout=30;User Instance=True", _dbPath);
_connection = new SqlConnection(dbId);
Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
// Reset database if the file exists
var ctx = new MyContext(_connection);
ctx.Database.CreateIfNotExists();
ctx.Database.Initialize(true);
ctx.SaveChanges();
return _connection;
这适用于我的测试,但不适用于我运行Web应用程序时。当我运行Web应用程序时,我得到:
发生与网络相关或特定于实例的错误 建立与SQL Server的连接。找不到服务器或 无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 查找服务器/实例时出错 指定)
我在其他一些问题中看到人们建议从连接字符串中删除“用户实例”,但结果是:
在数据库“master”中拒绝CREATE DATABASE权限。
让我完全清楚我的目标:我正在尝试让Web应用程序按需创建数据库实例(sqlexpress
)。
提前创建数据库实例 不是解决方案。
当app工作人员访问并创建数据库时,我很困惑为什么需要某种特殊权限。
你怎么能这样做?
使用sqlite这是一个简单的操作,我开始觉得使用Entity Framework(因此SQL Server Express)是错误的,我应该用流利的nhibernate和sqlite代替。
答案 0 :(得分:1)
本文http://support.microsoft.com/kb/2002980表明它是“ASP.Net V4.0”应用程序池的默认帐户“ApplicationPoolIdentity”的文件权限问题,并建议将其更改为使用“网络服务”。