私はMVCを使用するのが初めてで、アプリケーションを最初に起動したときに、イニシャライザを使用してデータをDBに初期化しようとしています。以下は、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でサーバーとデータベースへの接続を確実に閉じるようにしましたが、このDBには複数のユーザーがアクセスできますが、現時点では誰も使用していません。 DBでこのデータを初期化できるようにするにはどうすればよいですか?ありがとう!
編集:私はすでにサーバー上に作成されたDBを持っていますが、それは完全に空です(テーブル、プロシージャなどはありません)。これは問題を引き起こしますか?
SSMSでこのようなものを実行してください...
USE master -- be sure that you're not on MYDB
ALTER DATABASE MYDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE MYDB;
MVC codefirstを使用するときに、今日同様の問題に直面しました。さまざまなことを20分間試してみたところ、Visual Studioの[サーバーエクスプローラー]タブでデータベースへの接続が開かれていることに気付きました。 Visual Studioのサーバーエクスプローラータブで接続を「閉じた」後、コードを実行してデータベースを自動的に再作成できました。
Vardhiniで説明されているように、サーバーエクスプローラーでDB接続を閉じます。
SSMSの[削除]ウィンドウで、[既存の接続を閉じる]がオンになっていることを確認します。
私の観察は:
次に、アプリケーションはDatabase.SetInitializer<DbContext>(new DbInitializer());
がpublic DbContext();
にある場合でもDBを再構築します-他のanswearsがそれをApplication_Start();
に配置するのとは異なり
Visual Studio Server ExplorerとSQL Management Studioでデータベースの既存の接続をすべて閉じると、問題が解決しました。