MVC 5 プロジェクトに EF 6 (移行を伴うコードファースト) を使用しています。私のローカル DEV マシンでは、すべて正常に動作します。
しかし、プロジェクトを Azure にデプロイすると、アプリが最初にデータベースと対話しようとしたときに、次のエラーが発生します。
Migrations is enabled for context 'UtilitiesContext' but the database does not exist or
contains no mapped tables. Use Migrations to create the database and its tables, for
example by running the 'Update-Database' command from the Package Manager Console.
Utilities.Data アセンブリに EF 関連のコードがあり、MVC プロジェクトは Utilities.Web アセンブリにあります。
参照用の私のコードは次のとおりです。
UtilitiesContext.cs
public sealed partial class UtilitiesContext : DbContext
{
public UtilitiesContext() : base(Settings.Get(Settings.DB_CONNECTION_STRING)) { }
public DbSet<PreLaunchSubscriber> PreLaunchSubscribers { get; set; }
private void SetCreatedAtUpdatedAt()
{
foreach (DbEntityEntry entityEntry in ChangeTracker.Entries())
{
switch (entityEntry.State)
{
case EntityState.Added:
((IEntity) entityEntry.Entity).CreatedAt = DateTime.Now;
break;
case EntityState.Modified:
((IEntity) entityEntry.Entity).UpdatedAt = DateTime.Now;
break;
}
}
}
[HandleException]
public override int SaveChanges()
{
SetCreatedAtUpdatedAt();
return base.SaveChanges();
}
[HandleException]
public override Task<int> SaveChangesAsync()
{
SetCreatedAtUpdatedAt();
return base.SaveChangesAsync();
}
}
Configuration.cs
internal sealed class Configuration : DbMigrationsConfiguration<UtilitiesContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
ContextKey = "Utilities.Data.Contexts.UtilitiesContext";
}
protected override void Seed(UtilitiesContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
}
}
設定.cs
public static class Settings
{
public const string DB_CONNECTION_STRING = "DB.ConnectionString";
// other settings ...
public static string Get([Required] string key)
{
return CloudConfigurationManager.GetSetting(key);
}
}
そして、タブのApp Settings
セクションでこれを定義しました:Configuration
キー: DB.ConnectionString
値: データ ソース=tcp:host.database.windows.net,1433;初期カタログ=ユーティリティ;ユーザー ID=user@server;パスワード=pwd;