2013-06-13 8 views
14

私はMVCを使うのが初めてで、アプリケーションを初めて起動したときにイニシャライザを使用してデータベースにデータを初期化しようとしています。ここで私はGlobal.asax.csに持​​っているものです:Web.configファイルでデータベースが現在使用中であるため、データベースを削除できませんMVC

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

、ここに私の接続文字列は次のとおりです。

<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で、サーバーやデータベースへの私の接続を閉じたが、複数の人が、このDBへのアクセス権を持っていることを確認しました。このデータをDBで初期化できるようにするにはどうすればよいですか?ありがとう!

編集:私は既にDBをサーバー上に作成していますが、それは完全に空です(テーブルやプロシージャなどはありません)。これは問題を引き起こすでしょうか? SSMSで

答えて

19

はMVC codefirstを使用しているとき、私は今日、同様の問題に直面して、このような何か...

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

構文エラーが発生しました: 'IMMEDIATE'の近くの構文が間違っていました。これを取り出して実行しましたが、停止する前に約5分間実行しました。この場合、エラーが発生します:ROLLBACK TRANSACTION要求に対応するBEGIN TRANSACTION。 – SantasNotReal

+0

WITH ROLLBACK IMMEDIATE – Sam

+0

*** LocalDB ***は、_mdf file_を使用して動作しますか? – Kiquenet

41

を実行します。私が気づいた様々なものを20分試してみると、Visual Studioの「サーバーエクスプローラ」タブにはデータベースが接続されていました。ビジュアルスタジオのサーバーエクスプローラタブで接続を「閉じた」後、コードを実行して自動的にデータベースを再作成できました。

+1

面白い、Visual Studio(VS 2015を使用して)オープン接続で、このケースを単独で処理することはできません!データソース=(LocalDB)\ v11.0; AttachDbFilename = | DataDirectory | \ wingtiptoys.mdf; –

+1

@TwoPeaサンプルMVCプロジェクトで使用されているLocalDbと同じ問題がありました。あなたのソリューションはそれを解決しました。 – nam

+0

これは実際の解決策であり、回答として受け入れる必要があります – Thinking

2

SSMSの[削除]ウィンドウで、[既存の接続を閉じる]がオンになっていることを確認します。

+0

これらの方法をすべて試して落とすと、SSMSが閉じられ、VSでデータ接続が閉じられ、VSが閉じられました。接続がまだ閉じていることを確認するために開かれたVSが、アプリケーションを実行しました。それはうまくいった。 – JaneH

0

Visual StudioのサーバーエクスプローラとSQLManagement Studioでデータベースの既存の接続をすべて閉じると、問題が解決しました。

+0

私はそれを***プログラムで行うことができますか?***ビジュアルスタジオサーバーエクスプローラ? – Kiquenet

6

VS2015 close DB connection Vardhiniによって説明されているように、サーバーエクスプローラでDB接続を閉じます。

+0

'ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE'は*** LocalDB ***に当てはまりますか? – Kiquenet

0

私の観察結果は以下のとおりです。

  1. は、アプリケーション
  2. にログインすることはできませんサーバーエクスプローラ
  3. にDBに接続することはできません。そして、アプリケーションがDBを再構築SSMS

と接続することはできません。 Database.SetInitializer<DbContext>(new DbInitializer());public DbContext();にある場合でも、他の回答と同じではありません。Application_Start();

+0

これらの方法をすべて試してDBを落とした後、私はSSMSを閉じ、VSでデータ接続を閉じてVSを閉じました。接続がまだ閉じていることを確認するために開かれたVSが、アプリケーションを実行しました。それはうまくいった。 – JaneH

関連する問題