如何在C#MVC应用程序中在运行时创建SQL Server Express数据库?

时间:2012-10-03 02:01:02

标签: c# entity-framework sql-server-express

我正在尝试使用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代替。

1 个答案:

答案 0 :(得分:1)

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