asp.net-mvc – 实体框架5迁移:设置初始迁移和数据库的单个种子
|
我有一个MVC4应用程序,我最近升级到Entity Framework 5,我试图将我们的数据库迁移到使用迁移从开发风格的删除和创建每个运行。 这里是我在我的应用程序启动功能。 protected void Application_Start()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion< MyContext,Configuration >() );
...
}
我在我的存储库项目上运行Enable-Migrations命令,我认为这将创建一个初始迁移文件,但是它创建的唯一文件是配置 当我删除数据库,它创建它的预期通过代码首先和种子数据库从配置文件。在配置文件中我将所有Add()函数改为AddOrUpdate() 但是,它会在我的配置文件中运行种子函数,每次网站启动和重复所有的种子数据一次又一次。 我想象它会创建一个初始迁移文件作为我读的博客建议,我会把种子数据在那里,但它没有 任何人都可以解释我应该如何设置DB在代码,使它只有种子一次? LINK: The migrations blog post I followed 虽然这是非常有趣的使用EF migrate.exe我已经切换到使用roundhouse运行迁移。我仍然使用EF来支持我的迁移基于模型,但我写了一个小的控制台应用程序写入迁移到SQL文件。然后我使用roundhouse通过我的rake构建脚本自己执行迁移。有一个更多的过程涉及,但它比使用EF更稳定,以在应用程序启动时执行迁移。 解决方法这已被证明是一个流行的帖子,所以我已经根据他人的反馈更新。要知道的主要事情是,配置类中的种子方法是每次应用程序启动时运行,这不是模板方法中的注释。看到有人在微软对这个 post的答案,为什么是 – 感谢Jason Learmouth找到了。如果你像我一样只想运行数据库更新,如果有任何未决的迁移,那么你需要做一些更多的工作。你可以通过调用migrator.GetPendingMigrations()来查找是否有挂起的迁移,但是你必须在ctor中这样做,因为在调用Seed方法之前清除挂起的迁移列表。在Migrations.Configuration类中实现的代码如下: internal sealed class Configuration : DbMigrationsConfiguration<YourDbContext>
{
private readonly bool _pendingMigrations;
public Configuration()
{
// If you want automatic migrations the uncomment the line below.
//AutomaticMigrationsEnabled = true;
var migrator = new DbMigrator(this);
_pendingMigrations = migrator.GetPendingMigrations().Any();
}
protected override void Seed(MyDbContext context)
{
//Microsoft comment says "This method will be called after migrating to the latest version."
//However my testing shows that it is called every time the software starts
//Exit if there aren't any pending migrations
if (!_pendingMigrations) return;
//else run your code to seed the database,e.g.
context.Foos.AddOrUpdate( new Foo { bar = true});
}
}
我应该指出,有些人建议将种子代码放在实际的“向上”迁移代码中。这工作,但意味着你需要记住把种子代码在每个新的迁移,它很漂亮的记住,所以我不会这样做。然而,如果你的种子随着每次迁移而改变,那么这可能是一个很好的方法。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – MVC 3 WebGrid – 可以进行内联编辑吗?
- 如何在ASP.NET按钮中使用Twitter Bootstrap图标?
- iis-6 – IIS 6上的ASP.NET路由
- jwt – ASP.NET 5 OAuthBearerAuthentication:以下认证方案
- asp.net – 动态创建的DropDownList在Postback上丢失了List
- asp.net-web-api – 可以从Request对象获取当前的MediaType
- 在ASP.NET MVC 2中实现DropDownList的最佳方式?
- asp.net-mvc – 如何在MVC3中的局部视图中渲染节?
- asp.net-mvc – 路由在Asp.net Mvc 4和Web Api
- 只需发布已修改的控制器,模型和ASP.NET MVC项目的某些部分
- asp.net – 存储CheckBoxList的DataValueField值
- ASP.NET Core 2.0 WebApi全局配置及日志实例
- asp.net-mvc – Razor MVC4 Url.Action无效
- asp.net-core – 如何使.NET Core类库从.NET 4.6
- asp.net-mvc-4 – 在MVC中的App_Start()文件夹中
- asp.net – 如何添加一个访问控制允许原始头在II
- asp.net – Visual Studio加载项自动附加到Devel
- asp.net-mvc – 使用ASP.NET MVC进行消防和遗忘
- asp.net-mvc-3 – 将输入值传递给Action(ASP.Net
- asp.net-mvc – asp.net mvc中的动态子域
