在我的MVC项目中,我想使用自动迁移和自动更新数据库。
我有一个AppActivator类 - 我初始化DB:
[assembly: WebActivator.PreApplicationStartMethod(typeof(AppActivator), "PreStart")]
[assembly: PostApplicationStartMethod(typeof(AppActivator), "PostStart")]
[assembly: ApplicationShutdownMethod(typeof(AppActivator), "Stop")]
namespace Manual.Web
{
public static class AppActivator
{
public static void PreStart()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ManualContext, Configuration>());
MeasurementConfig.RegisterUnits();
MiniProfilerPreStart();
}
...
}
配置类 - 我称之为种子函数:
public class Configuration : DbMigrationsConfiguration<ManualContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(ManualContext context)
{
//if (context.Items != null && context.Items.Count() == 0)
try
{
ManualDbInitializerSeed.SeedForDB(context);
}
catch(Exception ex){
}
}
}
种子功能:
public static void SeedForDB(ManualContext context)
{
foreach (MI_Item s in RegisterItemsConfig.GetConfig().Items)
{
Item st = new Item { Key = s.Name, DefaultUnknownItem = s.DefaultUnknown };
context.Items.Add(st);
}
context.SaveChanges();
...
}
但是在保存更改时 - 我收到此错误:
"Invalid object name 'dbo.Items'." {System.Data.SqlClient.SqlException}
当我查看SQL管理工作室时,我看到有一个新的数据库“手册”,但它只有迁移表,没有剩下的表。
如果我使用CreateDatabaseIfNotExists它可以正常工作 - 但它不支持迁移,因此对我来说这不是一个好的解决方案。
我不想在SQL中编写所有代码,因为我失去了代码优先的所有优势。