我在使用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映射覆盖属性?
由于
答案 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
属性,它应该可以工作。