0

我正在尝试在 MVC3 Web 应用程序中使用 C# 中的 Entity Framework 5 来执行此操作:

// 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按需创建数据库实例 ()。

提前创建数据库实例不是解决方案。

当应用程序工作人员访问和创建数据库时,为什么需要某种特殊权限,我对此感到非常困惑。

你怎么能做到这一点?

使用 sqlite 这是一个微不足道的操作,我开始觉得使用 Entity Framework(以及 SQL Server Express)是错误的,我应该使用 fluent nhibernate 和 sqlite 来代替。

4

1 回答 1

1

这篇文章http://support.microsoft.com/kb/2002980建议这是“ASP.Net V4.0”应用程序池的默认帐户“ApplicationPoolIdentity”的文件权限问题,并建议将其更改为使用“网络服务”。

于 2012-10-03T03:20:38.470 回答