我可能不理解迁移,但我正在更新我的开源应用程序以使用它们。我的目标是实体框架迁移 - 自动创建表和更新
1)当用户首次使用空白数据库运行应用程序时,应用程序自动创建表(并命中我的种子方法以自动填充所需的数据)。
2)如果我添加任何新的属性到我的实体/模型类,它们是在数据库时自动添加的。
是否可以在不使用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);
}
}
再一次,我可能会误解。但是我创建了一个空白数据库并运行指向数据库的应用程序。
无法创建所有字段的表,因为我怀疑?我在这里错过了什么吗?
我一直在针对现有的数据库进行开发,为了让它工作,我找到了一篇博客文章,概述您需要做些什么才能使其与现有数据库一起工作。
只需运行在包管理器 控制台窗口附加迁移初始命令,浏览到迁移文件夹,修改已添加新的文件 ,它将包含inhereits DbMigration一类,有两个方法,向上和向下。如果删除方法的所有 内容,但保留方法,则在程序包管理器控制台中运行 Update-Database -Verbose命令,它将 工作。
所以我清除了UP()和Down()方法。如果我把它们放回去,那么我不能针对现有的数据库运行。
也许这只是我认为它会比我想象的更聪明。知道如果需要创建表并根据模型映射自动更新缺少的字段?
我在印象之下,你可以做到这一点没有Nuget?那么您可以通过编译的应用程序部署更改和安装? – leen3o
对不起,没有。我总是使用nuget。我真的不相信没有nuget就可以做到这一点。但我没有看到一个大问题。您只需要添加“文件与迁移”,然后部署应用程序。为什么你不想使用nuget? – anastasiya
@anastasiya是对的。 updatemigrationsyadayadayada初始化器运行现有的迁移。它不确定迁移可以是什么。有这样的自动迁移功能。但是,这给你零控制。它会发现,创建并执行迁移。它默认关闭,甚至在EF7中消失。我甚至不会将它用于演示应用程序。就像anastasiya说的那样,我只是使用add-migrations,并将结果类包含在已部署的应用程序中。然后初始化器会做这件事。 –