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}); } } 我应该指出,有些人建议将种子代码放在实际的“向上”迁移代码中。这工作,但意味着你需要记住把种子代码在每个新的迁移,它很漂亮的记住,所以我不会这样做。然而,如果你的种子随着每次迁移而改变,那么这可能是一个很好的方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular-JS模仿Form表单提交
- 如何在VBScript中使用最小的分隔符和时区格式化日期时间?
- asp.net – 在IIS 7或IIS 7.5集成模式下,默认文档中可能不会
- asp.net-mvc – 跨应用程序进行表单身份验证的ServiceStack
- asp.net-mvc – IIS 7.5.无法禁用Url重写规则(我删除了规则
- asp.net-mvc – 将index.html设置为默认页面
- asp.net-mvc – 用于mvc 3的jquery ui助手
- asp.net-core – ASP.Net核心maxUrlLength
- asp.net – 在IIS7.5中不可见的无扩展名图像文件
- asp.net – 如何关闭我在JavaScript中打开的所有IE浏览器窗
- asp.net-mvc – 如何在mvc中使用图表控件
- asp.net-mvc – 实现MVC 5 IAuthenticationFilte
- CanvasPath Schema
- 初识ABP vNext(6):vue+ABP实现国际化
- asp.net – IIS 7.5 Web应用程序首先请求应用程序
- asp.net-mvc-4 – 在EF迁移配置类的Seed方法中获
- asp.net-mvc-2 – 如何在Asp.net MVC2中通过Ajax
- asp.net – MVP模式和会话值
- asp.net-identity – AspNetCore – 使用Google身
- asp.net – 减轻Web服务器上的RsaCryptoServiceP