如何在使用 Entity Framework 4.1 创建的生产中的现有数据库上使用迁移?

2023-11-23

我有一个正在生产的系统,是使用 Entity Framework 4.1 Code First 创建的。现在,我已经升级到 4.3 并需要应用迁移,但我需要涵盖几个用例:

  1. 新开发人员需要使用种子数据从头开始创建数据库。 (这Seed()方法还应用一些独特的索引。)
  2. 生产环境只需要应用未应用的更改。 (但请记住,此数据库是在 EF 4.1 中创建的,它没有迁移。)

如何创建迁移和初始化程序(或初始化程序)来涵盖这两种情况?


由于您的生产数据库是使用 EF 4.1 创建的,因此您需要做一些工作才能使其准备好用于迁移。从在开发环境中运行的当前生产代码的副本开始。确保开发数据库不存在。

  1. 升级项目以将 EF 4.3(或更高版本)与迁移结合使用,并创建初始迁移以快照当前的生产情况。

    Update-Package EntityFramework
    Enable-Migrations
    Add-Migration InitialCreate  
    
  2. 将数据库初始值设定项替换为匹配的迁移代码。

    对于种子数据,将其添加到Seed()的方法Migrations\Configuration.cs文件。请注意,与Seed()初始化程序中的方法,该方法每次都会运行Update-Database叫做。它可能需要更新行(重置种子数据)而不是插入它们。这AddOrUpdate()方法可以对此有所帮助。

    由于现在可以通过迁移创建您独特的不确定性,因此您应该将它们添加到Up()InitialCreate 迁移的方法。您可以将它们链接起来CreateTable()调用使用Index()方法,或者通过调用CreateIndex() method.

    您可以使用将数据库迁移到最新版本初始化程序现在可以在初始化期间运行迁移。

  3. 获取一个脚本来引导您的生产环境。

    Update-Database -Script
    

    从生成的脚本中,您将需要删除几乎所有内容,因为表已经存在。您需要的零件是CREATE TABLE [__MigrationHistory] and INSERT INTO [__MigrationHistory]声明。

  4. (可选)删除EdmMetadata表,因为不再需要它。

一旦你做了这些事情,你就应该可以进行迁移了。新开发者可以运行Update-Database从头开始创建数据库,您可以运行Update-Database(或使用迁移初始值设定项)针对生产环境应用额外的迁移。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用 Entity Framework 4.1 创建的生产中的现有数据库上使用迁移? 的相关文章

  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 如何为连接范围变量编写动态 where 子句

    我一直在使用 LINQ 进行查询 但遇到了动态 where 子句的问题 我想检查一个条件 如果为真 则将其添加到我的查询中 问题在于 where 正在使用我的连接之一中的范围变量之一 我的工作查询如下 var query from proj
  • 如何更改隔离级别?

    我正在使用 EF 4 0 并且我想使用隔离级别serializable 因为在事务中我想在读取时阻止寄存器 好吧 在 SQL Server 中 我尝试使用以下命令更改隔离级别 SET TRANSACTION ISOLATION LEVEL
  • 如何使用Entity Framework Code First CTP 5存储图像?

    我只是想弄清楚是否有一种简单的方法可以使用 EF Code First CTP 5 存储和检索二进制 文件 数据 我真的很希望它使用 FILESTREAM 类型 但我真的只是在寻找某种方法让它工作 我总是创建另一个类 例如ProductIm
  • 实体框架与oracle数据库的连接

    我使用的是 Entity Framework 6 1 版本和 oracle 11 我是实体框架的新手 任何人都可以建议连接 oracle 的先决条件是什么 任何更改都需要在 web config 中进行 在web config中 默认它是与
  • EF 6:映射复杂类型集合?

    EF 6 代码优先 是否支持复杂类型集合 值对象集合 映射 我知道它支持复杂类型 但还没有找到我们拥有复杂类型集合的示例 例如 假设您有一个名为 Student 的实体 其中包含联系人集合 对于 NH 我可以简单地说 Student 有一个
  • 如何简单地添加指向 Spring Data REST 实体的链接

    我有带有 Spring Data JPA 的实体 但为了生成有关它们的统计信息 我在 Spring 中使用 jOOQ Repository 由于我的方法返回一个List的实体 或Double 我如何将它们公开为链接 假设我有一个User实体
  • 实体框架按枚举值按字母顺序排序

    我有一个名为Comment 其中有一个enum类型的属性CommentType public class Comment public virtual Guid Id get private set public virtual Comme
  • AssociationSet 中的关系处于“已删除”状态

    我正在尝试在我的网站中创建新帖子 但由于某种原因 EF 抛出以下错误 来自 PostAttributeValue Definition 关联集的关系 处于 已删除 状态 给定多重约束 相应的 PostAttributeValue Defin
  • EF6 找不到 LocalDBConnectionFactory

    我有 2 个项目 类库 作为 DAL 层 和 ASP NET MVC 项目 作为 UI 为了获取数据 我尝试使用 EF6 但它不起作用 所有异常文本 EntityFramework dll 中发生 System InvalidOperati
  • NotSupportedException:LINQ to Entities 无法识别该方法[重复]

    这个问题在这里已经有答案了 我正在尝试使此查询与 EF 一起使用 但它抛出异常 var c ac Communities OrderBy o gt o Posts Count Skip page limit Take limit Selec
  • 使用 DI 将参数传递给 DbContext

    我想向 DBContext 传递一个附加参数 如下所示 string myParam xx string con connenctionstring services AddDbContext
  • MVC 下拉列表未映射到模型

    我正在尝试使用 EF codefirst 在 MVC 3 中开发应用程序 当我使用 int 属性和约定来设置外键关系时 例如 public class Patient public int ConsultantId get set 然后 我
  • 抑制实体框架核心中的 SQL 查询日志记录

    我有一个使用实体框架核心的控制台 net core 应用程序 该应用程序使用日志框架写入文件和控制台 serviceProvider new ServiceCollection AddLogging AddDbContext
  • .NET 实体框架核心

    我已经阅读了过去两年中发布的几乎所有有关 EF 的其他问题 我下载其他软件包没有任何问题 只是实体框架不会为我安装 我什至尝试安装最新版本的 Nuget 并在我的项目目录中使用它的工具来恢复包 之后 我将这一行添加到我的 csproj 中
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • 执行迁移 EF core 2.0 时出错,将身份 id 从字符串更改为 int

    设想 我从同事那里收到了 ASP NET CORE 自动生成的项目 帐户 管理服务有自动生成的代码 此代码包括 ApplicationUser 类 DBContext 和迁移文件夹 其中包含 00000000000000 CreateIde
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 如何使用 Entity Framework Code First 在两个实体之间建立多个一对多关系

    下面是保存关系数据库记录的简单方法 该方法运行得很好 我对一种情况有疑问 在此之前 我需要知道如果数据库复杂性增加 我所采用的方法会遇到什么困难 还有更好 高效但简单的方法吗 一对一 tb student store student det
  • EF 4.1 加载过滤的子集合不适用于多对多

    我一直在看显式加载相关实体时应用过滤器 http blogs msdn com b adonet archive 2011 01 31 using dbcontext in ef feature ctp5 part 6 loading re

随机推荐