Entity Framework 5 的新迁移功能是否完全支持枚举更改?

2023-12-26

假设我们有以下简单模型:

public class Car
{
    public int Year { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public CarType Type { get; set; }
}

public enum CarType
{
    Car, Truck
}

实体框架,当添加新的Car对象到数据库,将存储CarType作为整数的枚举值。

如果我们改变CarType枚举以整数值更改的方式(更改顺序或添加/删除值),实体框架是否知道如何使用迁移正确处理数据迁移?


例如,假设我们添加了另一个值CarType:

public enum CarType
{
    Car, Truck, Van
}

这不会对数据库中的现有数据产生任何实际影响。0还是Car, and 1还是Truck。但如果我们改变顺序CarType, 像这样:

public enum CarType
{
    Car, Van, Truck
}

数据库记录与1 as the CarType指定Truck将是不正确的,因为根据更新的模型1 is now Van.


不,迁移does not完全支持枚举更改,因为它不会更新数据库值以反映更改(例如更改顺序、添加或删除)。

在保留顺序的同时添加枚举值不会产生任何效果。事实上,它甚至不会引发模型支持更改错误。

如果顺序为CarTypeenum 发生变化,那么数据库数据实际上将无效。原本的int值被保留,但枚举结果将是错误的。

为了适应这种类型的变化,需要手动处理数据库数据。在此特定示例中,必须运行自定义 SQL 来更改Type根据枚举更改的列:

public partial class CarTypeChange : DbMigration
{
    public override void Up()
    {
        // 1 now refers to "VAN", and 2 now refers to "Truck"
        Sql("Update cars Set [Type] = 2 Where [Type] = 1");
    }

    public override void Down()
    {
        Sql("Update cars Set [Type] = 1 Where [Type] = 2");
    }
}

附录:我问了另一个与此相关的问题:处理实体框架 5 中的枚举更改 https://stackoverflow.com/questions/11942078/handling-enum-changes-in-entity-framework-5

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

Entity Framework 5 的新迁移功能是否完全支持枚举更改? 的相关文章

  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 是否可以在 Rails 迁移中使用外部 SQL 文件?

    我必须创建一个 Rails 迁移 它会创建许多触发器和存储过程 通常人们会使用execute方法 但由于语句的大小 我宁愿将它们保存在外部文件中并从迁移中引用它 我怎样才能做到这一点 有可能吗 您可以将它们存储在文本文件中并通过 File
  • EF6“模型配置”已设置但未发现

    我有以下库 实体模型 dll 包含 POCO 类 实体DAL dll 引用EntityMODEL dll 实体服务 dll 引用 EntityMODEL dll 和 EntityDAL dll 实体测试 dll 引用 EntitySERVI
  • 实体框架中 1:1 关系中关联的主体端意味着什么

    public class Foo public string FooId get set public Boo Boo get set public class Boo public string BooId get set public
  • 在实体框架中对连接字符串进行硬编码

    我知道很多人认为对连接信息进行硬编码是一个坏主意 但我有一个特定的情况需要这样做 请不要贬低我 因为你认为这是一个坏主意 再次 非常具体的情况 使用下面的代码 我在 LINQ 语句上收到以下错误 底层提供程序在打开时失败 我已经独立测试了连
  • LINQ 按降序排序,底部为空值 [重复]

    这个问题在这里已经有答案了 我有这样的表达 troubletickets db ServiceTickets Include t gt t Company Include t gt t UserProfile troubletickets
  • 实体框架按枚举值按字母顺序排序

    我有一个名为Comment 其中有一个enum类型的属性CommentType public class Comment public virtual Guid Id get private set public virtual Comme
  • 实体框架以错误的顺序插入子对象

    Question 为什么 EF 首先在它所依赖的对象 TimesheetActivity 之前插入具有依赖项的子对象 PersonnelWorkRecord 另外我有哪些纠正这个问题的选择 ERD 简化 This is predefined
  • 迭代非增量枚举

    在你问之前 我已经looked https stackoverflow com questions 261963 c iterate through an enum and looked https stackoverflow com qu
  • 视频无法使用 Paperclip Gem - Rails 中的 ffmpeg 上传

    我可以上传图像 但是 当我尝试上传视频时 它会显示为黑屏 并且播放按钮不起作用 我不确定我哪里错了 我需要视频播放器才能实现此功能吗 这可能是一个简单的解决方案 但是 我是 Rails 新手 任何帮助是极大的赞赏 谢谢 邮政模型 class
  • 如何将 mvc-mini-profiler 与 Entity Framework 4.1 一起使用

    我尝试将 mvc mini profiler 与 MVC3 一起使用 但不断收到以下错误 无法确定 MvcMiniProfiler Data ProfiledDbConnection 类型连接的提供程序名称 下面是我用来尝试实例化上下文的代
  • 使用 linq 2 实体检查 where 子句的两个条件

    嗨 我有一个名为 产品 的表 其中包含列 product id prodcut name prodcut price values like 1200 2000 3000 100 prodcut desc category id 1 2 3
  • 如何调试 EF5 在运行时生成的 SQL?

    所以我对 EntityFramework 还很陌生 实际上现在处于 POC 阶段 我试图回答的问题之一是如何通过调试器或其他进程可附加工具可视化 EF 生成的查询 我试图解决的情况是 在尝试调试 QA 或生产问题时 开发人员需要能够通过远程
  • 使用 DbContext 进行模型优先,无法初始化新数据库

    我放弃 我找到了这个 http blogs msdn com b adonet archive 2011 03 15 ef 4 1 model amp database first walkthrough aspx http blogs m
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • Android:枚举与静态最终整数?

    有什么优点 或缺点 enum与拥有一组static final intJava Android 应用程序中的s 是否存在有利于使用其中之一的效率或性能优化 我在意图 requestCodes 之类的上下文中提出这个问题 在 Android
  • .NET 实体框架核心

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

    这个问题在这里已经有答案了 我在为 LINQ 查询中包含的项目添加一些过滤条件时遇到一些困难 我的查询就像 var item Context Order Include Inner Include Inner first Include I
  • 有没有一种方法可以“展平”Rust 中的(反)序列化枚举?

    我有一个由其他枚举组成的枚举 类似于以下内容 serde为简洁起见 省略了派生和注释 enum Main A SubA B SubB enum SubA X1 X2 X3 enum SubB Y1 Y2 Y3 我很想能够使用serde反序列
  • 如何使用 Entity Framework Code First 在两个实体之间建立多个一对多关系

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

随机推荐