我可能不了解迁移,但我正在更新我的开源应用程序以使用它们。我的目标是
1)当用户第一次使用空白数据库运行应用程序时,应用程序会自动创建表格(并点击我的种子方法以自动填充所需数据)。
2)如果我向我的Entity / Model类添加任何新属性,它们会在数据库时自动添加。
是否可以在不使用Nuget命令的情况下执行此操作?正如我希望这会占用我的许多安装程序代码,以便在首次安装时初始创建表并添加数据。
我有以下设置
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MVCForumContext, Migrations.Configuration>(AppConstants.MvcForumContext));
我的配置类
internal sealed class Configuration : DbMigrationsConfiguration<MVCForumContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
}
protected override void Seed(MVCForumContext 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" }
// );
//TODO - ADD THE INITIAL DATA HERE
}
}
我使用流畅的API(即。)
正确映射了所有模型类public class BadgeMapping : EntityTypeConfiguration<Badge>
{
public BadgeMapping()
{
HasKey(x => x.Id);
Property(x => x.Id).IsRequired();
Property(x => x.Name).IsRequired().HasMaxLength(50);
Property(x => x.Description).IsOptional();
Property(x => x.Type).IsRequired().HasMaxLength(50);
Property(x => x.Image).IsOptional().HasMaxLength(50);
Property(x => x.DisplayName).IsRequired().HasMaxLength(50);
Property(x => x.AwardsPoints).IsOptional();
// Ignores
Ignore(x => x.Milestone);
}
}
同样,我可能会误解。但我创建了一个空白数据库并运行指向数据库的应用程序。
我怀疑是否无法创建包含所有字段的表格?我在这里错过了什么吗?
我一直在针对现有数据库进行开发,为了使其正常运行,我发现了一篇博客文章,概述了使用现有数据库时需要做些什么。
只需在包管理器中运行add-migration initial命令即可 控制台窗口,浏览到Migrations文件夹,修改新文件 已经添加,它将包含一个不变的类 DbMigration,有两种方法,Up和Down。如果你删除所有的 方法的内容,但留下方法,然后运行 包管理器控制台中的Update-Database -Verbose命令 会工作的。
所以我已经清除了UP()和Down()方法。如果我把它们放回去,那么我就无法对现有数据库进行操作。
也许只是我认为它会变得比我想象的更聪明。知道创建表格如果需要并根据模型映射自动更新缺失的字段?
答案 0 :(得分:2)
每次更改模型类时都需要使用add-migration。在将更改新迁移应用于您的数据库后,首次运行应用程序时。通过首次迁移,您的数据库将获取MigrationHistory表,然后将其用于检查已应用的迁移以及需要应用的迁移。