实体框架6代码优先错误:属性' Foo'不是类型的声明属性' Bar'

时间:2016-03-01 00:47:26

标签: entity-framework

我在EF 6.0中尝试数据库迁移时遇到上述错误。我很确定这是因为属性在基类中被声明为抽象,然后在派生类中被重写。这里有一些伪造的代码来证明这一点:

public abstract class Base
{
    [Required]
    public abstract double Amount { get; set; }
}

public abstract class Foo : Base
{
    // just showing that this class is in the inheritance chain, nothing is done with the Amount field
}

public class Bar : Foo
{
    [Required]
    public override double Amount { get; set; }
}

确切的错误是:

财产'金额'不是类型' Bar'的声明属性。使用Ignore方法或NotMappedAttribute数据批注验证是否未从模型中显式排除该属性。确保它是有效的原始属性。

我已经看到其他SO线程声明要将abstract属性更改为virtual,但这不是一个选项,因为所有派生类都必须包含Amount属性。如果我需要添加一些映射/配置也是一个选项。

1 个答案:

答案 0 :(得分:1)

  

我已经看到其他SO线程声明要改变摘要   属性为虚拟,但这不是所有派生类的选项   必须包括Amount属性。如果我需要添加一些   映射/配置也是一种选择。

如果在Base类中将其设为虚拟,则所有派生属性包含Amount属性。实际上,作为一个简单的值类型属性,它甚至不需要是虚拟的。

我认为没有理由强制派生类覆盖该属性。如果您想要覆盖该房产的其他具体原因,请将其编辑到您的问题中。