Code First无法映射覆盖属性

时间:2011-12-05 13:00:50

标签: entity-framework ef-code-first code-first

我在使用Code First中的TPH将覆盖的属性从POCO对象映射到数据库时遇到问题。

我的代码类似于这些类:

public abstract class Vehicle
{
    public int ID { get; set; }
    public abstract NumberOfWheels { get; set;}
}

public class Motorbike: Vehicle
{
    public override NumberOfWheels { get; set; }
}

当我尝试将Motorbike类保存到Database时,我会收到下一条消息

  

属性'NumberOfWheels'不是类型的声明属性   '摩托车'。验证是否未明确排除该属性   通过使用Ignore方法或NotMappedAttribute数据从模型中   注解。确保它是有效的原始属性。

似乎代码首先无法映射覆盖属性。是否有任何建议如何首先使用Code映射覆盖属性?

由于

2 个答案:

答案 0 :(得分:1)

基类中的属性是否具有[NotMapped]属性?这可能导致派生类不将其属性值保存到相应的数据库表。在这种情况下,您将需要另一个属性,被覆盖的属性可以将值转发给。

public partial class BaseClass
{
    [NotMapped]
    public virtual int SequenceNumber { get; set; }

}


[Table("TABLE_TEST", Schema = "dbo")]
public partial class DerivedClass : BaseClass
{

    public override int SequenceNumber
    {
        get
        {
            return this.SeqNumField;
        }
        set
        {
            this.SeqNumField = value;
        }
    }

    // This is the property pointing to the real database column
    [Column(TypeName = "int"), Required]
    public int SeqNumField { get; set; }


}

答案 1 :(得分:-1)

问题不在于覆盖属性,而在于在基类中将属性定义为abstract。在基类中使用virtual属性,它应该可以工作。