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 的新迁移功能是否完全支持枚举更改? 的相关文章

随机推荐