gpt4 book ai didi

c# - 新继承的类在使用 EF Code First 进行迁移时重命名其属性名称

转载 作者:行者123 更新时间:2023-11-30 23:32:51 25 4
gpt4 key购买 nike

我正在使用 Entity Framework Code First 和继承来定义我的类,每个类都实现一个抽象类,其中包含所有它们应该具有的公共(public)属性。

当我想将新的添加到批处理时遇到了问题。所有继承的类都具有具有不同类型的通用名称的属性,但在最后一个类中,属性也具有相同的类型。

public abstract class ProductProperty
{
public string CommonProp { get; set; }
}


public class IntegerProperty : ProductProperty
{
[Required]
public int Value { get; set; }
}

public class StringProperty : ProductProperty
{
[Required]
public string Value { get; set; }
}

public class DoubleProperty : ProductProperty
{
[Required]
public double Value { get; set; }
}

到目前为止,一切都还不错。当我添加另一个具有整数 Value 属性的值时,Code First Migration 是通过移动 SQL 表上现有的 Value 列而不是创建新列来创建的,这当然会导致问题,因为我已经在 Properties 表中有数据。

public class IntWithUnitProperty : ProductProperty
{
[Required]
public int Value { get; set; }

public string Unit { get; set; }
}

RenameColumn(table: "dbo.ProductProperties", name: "Value1", newName: "Value2");
RenameColumn(table: "dbo.ProductProperties", name: "Value2", newName: "Value3");
AlterColumn("dbo.ProductProperties", "Value1", c => c.Int());
AlterColumn("dbo.ProductProperties", "Value2", c => c.String());

很明显这在很多方面都是错误的,但我已经尝试更新数据库:

Error: The new name 'Value2' is already in use as a COLUMN name and would cause a duplicate that is not permitted.

从这个行为来看,我的理解是 EF 开始按类名顺序给出名称和后缀:

  1. 双重值(value)
  2. Int 的值 1
  3. 字符串的 Value2

当我尝试将名称以 Int... 开头的另一个类添加到批处理中时,它会尝试将其放在 Value1 之后。

问题是,带有数字后缀的列名指向在 EF 中映射的具有相同名称的继承类的属性?

也许我可以告诉 EF 在 SQL 中添加一个新列并指向正确的类,而不是尝试操纵现有的类。

最佳答案

我认为您最好使用数据注释显式命名您的 Value 列,而不是冒险在迁移期间重新分配它们。例如:

public class IntegerProperty : ProductProperty
{
[Required]
[Column("Value1")]
public int Value { get; set; }
}

public class StringProperty : ProductProperty
{
[Required]
[Column("Value2")]
public string Value { get; set; }
}

等等。

或者,您可以使用按类型表 (TPT) 而不是默认的按层次结构表 (TPH),这样每个子类都有自己的表,因此 Value 将始终为称为 Value。示例:http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt

关于c# - 新继承的类在使用 EF Code First 进行迁移时重命名其属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34155030/

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