无法删除数据库,因为它当前正在使用MVC

时间:2013-06-13 19:29:10

标签: asp.net-mvc sql-server-2008

我是使用MVC的新手,我正在尝试使用初始化程序在首次启动应用程序时将数据初始化到我的数据库中。以下是我在Global.asax.cs中的内容:

 System.Data.Entity.Database.SetInitializer(new MyAppInitializer());
 MyAppContext db = new MyAppContext();
 db.Database.Initialize(true);

在Web.config中,这是我的连接字符串:

<connectionStrings>
  <add name="MyAppContext"
  connectionString="data source= MyServer; Integrated Security=True; database=MyDatabase"
  providerName="System.Data.SqlClient"/>

这是使用MS SQL 2008 R2。我的初始化程序看起来像这样:

public class MyAppInitializer : DropCreateDatabaseAlways<MyAppContext>
{
    protected override void Seed(MyAppContext context)
    {
        var organizations = new List<Organizations>
        {
            new Organizations { OrgName = "AT", OrgPhone = 5093333433, OrgOfficeLocation = "ITB", OrgPointOfContact = "Tony", OrgIsActive = 1 },
            new Organizations { OrgName = "Libraries", OrgPhone = 5093331122, OrgOfficeLocation = "Holland-Terrell", OrgPointOfContact = "Herald", OrgIsActive = 1 }
        };
        organizations.ForEach(s => context.Organizations.Add(s));
        context.SaveChanges();

我确保在SQL Server Management Studio中关闭了与服务器和数据库的连接,但是有多个人可以访问此数据库,但现在没有人应该使用它。我怎样才能得到它以便我可以在我的数据库中初始化这些数据?谢谢!

编辑:我已经在服务器上创建了数据库,但它完全是空的(没有表,程序等)。这会引起问题吗?

6 个答案:

答案 0 :(得分:46)

今天我在使用MVC codefirst时遇到了类似的问题。经过20分钟尝试各种各样的东西,我注意到了,&#34;服务器资源管理器&#34; Visual Studio中的选项卡具有对我的数据库打开的连接。在我&#34;关闭&#34;在Visual Studio的服务器资源管理器选项卡中,代码能够运行并自动重新创建数据库。

答案 1 :(得分:24)

在SSMS中运行类似的东西......

USE master -- be sure that you're not on MYDB
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE MYDB;

答案 2 :(得分:7)

VS2015 close DB connection 如Vardhini所述...在服务器资源管理器中关闭数据库连接。

答案 3 :(得分:3)

在SSMS&#34;删除&#34;窗口确保&#34;关闭现有连接&#34;检查。

答案 4 :(得分:0)

在Visual Studio服务器资源管理器和SQLManagement工作室中关闭数据库的所有现有连接为我解决了这个问题。

答案 5 :(得分:0)

我的观察是:

  1. 无法登录到应用程序
  2. 无法使用服务器资源管理器
  3. 连接到数据库
  4. 无法与SSMS连接
  5. 然后,即使Database.SetInitializer<DbContext>(new DbInitializer());位于public DbContext();,应用程序也会重建数据库 - 而不是其他答案可以将其放入Application_Start();