Tag: code first migrations

EF中IDatabaseInitializer的正确用法是什么?

我有一个自定义DatabaseInitialiser,如下所示 /// /// Implements the IDatabaseInitializer to provide a custom database initialisation for the context. /// /// TContext is the DbContext public class ParikshaDataBaseInitializer : IDatabaseInitializer where TContext : DbContext { /// /// The method to Initialise the database. /// Takes care of the database cannot be dropped since it is in use problem while […]

MVC5:UserManager.AddToRole():“将用户添加到角色时出错:找不到UserId”?

我一直在尝试使用MVC5 / EF6并尝试使用Code-First Migrations进行新的身份validation。 解决方案中的所有内容当前正在构建,我可以添加Migration ,但是当我通过VS2013中的package manager console执行update-database ,我的Configuration.cs文件无法将我的测试数据完全处理到我的表中并输出Error Adding User to Role: UserId not found 。 我已经尝试显式设置用户ID并让它由Manager生成(如某些示例所示),但每次收到相同的错误消息。 我知道我的Configuration.cs文件的#region User & User Roles中的错误是失败的,但我不确定原因: using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using PersonalPortfolio2.Helper; using PersonalPortfolio2.Models; using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Diagnostics; using System.Linq; namespace PersonalPortfolio2.Models { public sealed class Configuration : DbMigrationsConfiguration { public Configuration() […]

无法使用现有数据库运行EF5迁移

首先,我已经阅读了这些问题/答案: EF迁移消息 如何在使用基于代码的迁移时停止添加迁移检查我的数据库没有挂起的迁移? 使EF4.3代码优先迁移忽略挂起的迁移 这些似乎都适用于EF5之前的EF版本,我的情况似乎不适合这些答案。 所以,让我描述一下我的情况。 我的应用程序最初是使用EF4创建的,模型优先。 我使用GUI设计器设计了我的数据库,并用它来生成我的数据库。 我已经运行并将数据收集到数据库中几个月了。 我真的不能丢失这些数据。 我分支我的代码,用NuGet安装EF5,并使用EF Power Tools通过右键单击新的类库项目从我的数据库生成我的模型,然后选择Entity Framework | Reverse engineer code first Entity Framework | Reverse engineer code first 。 我能够顺利地重新引用我的新项目,将我的项目转换为使用新的DbContext而不是ObjectContext,并删除了保存旧模型的EF4类库。 该计划效果很好! 现在,我想尝试自动迁移,我在Ruby on Rails中有一些经验。 这是我做的: Ran Enable-Migrations 。 由于连接字符串和app.config被使用而有点麻烦,但最终得到了它。 但是, 这个MSDN页面说这应该自动生成第一次迁移,以使我达到我已经到达的程度。 它没有。 Ran Add-Migration InitialSchema来完成在步骤1中未自动完成的操作。这有效。 向我的某个模型对象添加了一个属性,然后尝试运行Add-Migration AddSerialToLogEntries ,并显示: 由于以下显式迁移未决,因此无法生成显式迁移:[201307190100268_InitialSchema]。 在尝试生成新的显式迁移之前应用挂起的显式迁移。 尝试在我现有的数据库上应用迁移失败,这并不奇怪。 我上面提到的其他答案基本上说我运气不好,但就像我说的那些是旧版本的entity framework。 我有什么选择吗? 在写这个问题时,我想我可以使用SQL Server Management […]

迁移同步开发和生产数据库

我正在使用MVC 5和.NET Framework 4.5.1。 代码优先。 我也在使用SQL 2012服务器和(localdb)\ v11.0进行迁移。 我正在使用C#和MVC5开发项目。 在开发过程中,我在我的开发计算机中创建了许多新表,并更改了一个“名称”字段,我相信系统会为其编制索引。 我添加了它并删除了几次。 之后,我添加了很多新的无关表,但出于某种原因,由于“名称”字段的索引,我的迁移开始给我外部约束错误。 当我修复它们时,这些错误不断增加,因此,我决定在迁移中恢复到初始状态,并使用当前位置作为新的起点重置。 我希望生产表能够在开发db中查看这个新的起点,并将其自身重新定义为开发状态。 我认为我已经读过某个地方,生产数据库将自己与开发数据库匹配并自行更新。 我相信生产数据库中有一个迁移文件,它与开发数据库中的文件相匹配 – 该文件明显不同步。 我考虑过删除其中的数据,但我一直在等待,直到得到建议。 无论如何,我在Dev计算机中更改了迁移目录的名称,并将其从项目中排除。 然后我在开发计算机上重新初始化我的表(在我的本地数据库中使用新的数据库名称),并使用初始化数据重新加载它。 一切都奏效了。 现在,我遇到了一个新问题,我的生产数据库和我的开发数据库是不同的,我在开发计算机中的迁移设置为创建新文件,而生产状态中的迁移期望更早的迁移。 每次我尝试使用开发计算机更新生产数据库时,我都会收到文件存在的错误 – 当然他们这样做了。 所以,我在迁移文件中注释掉了所有创建文件并重新尝试了。 现在,生产数据库将启动,但不会运行,因为更新的代码具有它所指的新字段,而这些字段未在生产数据库中创建。 因此,在我的生产数据库中,我开始收到所有缺失字段的错误。 我试图使自动迁移成为现实,但是没有用。 我猜,解决这个问题的唯一方法是手动进行逐个同步。 问题1:是否有一种自动同步(使用迁移)生产数据库和开发数据库的方法,以便它们与开发数据库相同? 问题2:考虑到上述情况,还有什么更好的方法可以用生产数据库重新设置迁移?

序列在EF CF迁移中包含多个元素错误

我创建了一些模型,添加了迁移,然后执行了更新数据库操作,但在我上次更新数据库操作时,我收到了错误消息: 序列包含多个元素 您可以在下面找到我的迁移配置: context.Categories.AddOrUpdate(p => p.CategoryName, new Category { CategoryName = “Sport” }, new Category { CategoryName = “Music” } ); context.Subcategories.AddOrUpdate(p => p.SubcategoryName, new Subcategory { SubcategoryName = “Football” }, new Subcategory { SubcategoryName = “Basketball” }, new Subcategory { SubcategoryName = “Piano” }, new Subcategory { SubcategoryName = “Violin” } ); context.Services.AddOrUpdate(p => […]

EF 5,Code First – 创建一个新数据库并以编程方式运行所有迁移

我正在使用Entity Framework Code First迁移,我有一个场景,我想运行一套集成测试。 每次运行测试时,我都想重新创建数据库,并应用所有迁移 步骤应该是: 删除现有的测试数据库(如果有) 创建新的测试数据库,并应用所有迁移 种子数据 这是我已添加迁移的现有项目,我使用Enable-Migrations命令创建“InitialCreate”迁移,其中包含将所有表添加到数据库的代码。 我的自定义IDatabaseInitializer的代码如下: public void InitializeDatabase(MyContext context) { //delete any existing database, and re-create context.Database.Delete(); context.Database.Create(); //apply all migrations var dbMigrator = new DbMigrator(new Configuration()); dbMigrator.Update(); //seed with data this.Seed(context); context.SaveChanges(); } 我的InitialCreate迁移的Up方法没有被这段代码调用,这不是我的预期。 而是在调用Database.Create()方法时创建所有表。 我需要运行InitialCreate迁移,因为我在那里有额外的代码来创建存储过程。 所以我的问题是,如何以编程方式创建新数据库并运行所有迁移(包括InitialCreate迁移)?