Code First не может сопоставить свойство переопределения - PullRequest
2 голосов
/ 05 декабря 2011

У меня проблемы с отображением переопределенного свойства из объекта POCO в базу данных с использованием TPH в Code First.

Мой код похож на эти классы:

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

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

Когда я пытаюсь сохранитьиз класса Motorbike в базу данных я получаю следующее сообщение

Свойство NumberOfWheels не является объявленным свойством для типа Motorbike.Убедитесь, что свойство не было явно исключено из модели с помощью метода Ignore или аннотации данных NotMappedAttribute.Убедитесь, что это допустимое примитивное свойство.

Кажется, что сначала код не может отобразить свойства переопределения.Есть ли какие-либо предложения, как сначала сопоставить свойство переопределения с кодом?

Спасибо

Ответы [ 2 ]

1 голос
/ 27 января 2017

Имеет ли свойство в базовом классе атрибут [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; }


}
0 голосов
/ 06 декабря 2011

Проблема не в переопределении свойства, а в определении свойства как abstract в базовом классе. Вместо этого используйте свойство virtual в базовом классе, и оно должно работать.

...