gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:15:37 24 4
gpt4 key购买 nike

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

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
}

Entity Framework ,当添加一个新的 Car对象到数据库,将存储 CarType枚举值作为整数。

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

例如,假设我们向 CarType 添加了另一个值:
public enum CarType
{
Car, Truck, Van
}

这不会对数据库中的现有数据产生实际影响。 0还在 Car , 和 1还在 Truck .但是如果我们改变 CarType的顺序, 像这样:
public enum CarType
{
Car, Van, Truck
}

带有 1 的数据库记录如 CarType指定 Truck将是不正确的,因为根据更新的模型 1现在是 Van .

最佳答案

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

在保留顺序的同时添加枚举值将不起作用。事实上,它甚至不会触发模型支持更改错误。

CarType的顺序枚举更改,那么数据库数据将有效无效。原版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");
}
}

附录:我问了另一个与此相关的问题: Handling enum changes in Entity Framework 5

关于entity-framework - Entity Framework 5 的新迁移功能是否完全支持枚举更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com