Как привести производный класс в базу с новыми свойствами? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть базовый класс и производный класс. Производный класс имеет то же свойство, что и базовый класс, но ему всегда нужно возвращать одно и то же значение / только для чтения

public class BaseClass 
{
    public int Id {get; set;}
    public TransactionTypeEnum TransactionType {get; set;}
}

public class DerivedClass: BaseClass 
{
    public new TransactionTypeEnum TransactionType {get;} = TransactionTypeEnum.Credit;
}

Проблема с этим заключается в том, что при приведении производного класса к базе я, конечно же, получаю 2 свойства: одно из базы и один из производных. Я мог бы также объявить свойство TransactionType как виртуальное, а затем переопределить его в производном классе, но затем я вынужден добавить метод установки. Какой лучший курс действий в этом случае? Создать маппер между этими двумя классами?

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

С моей точки зрения, ваше желание нарушает принцип подстановки Лискова ( см. Здесь ): ваш базовый класс определяет набор TransactionType. Так как каждый производный класс наследует это поведение, вы не должны нарушать его или удалять поведение, то есть удалять установщик. Может быть, производный класс не является настоящим наследником?

Другой подход может выглядеть следующим образом (защищенный установщик):

public class BaseClass 
{
    public int Id {get; set;}
    public TransactionTypeEnum TransactionType { get; protected set; }
}

public class DerivedClass: BaseClass 
{
    public DerivedClass()
    {
        TransactionType = TransactionTypeEnum.Credit;
    }
}
0 голосов
/ 17 марта 2020

вы можете сделать свойство виртуальным BaseClass, а затем переопределить его в DerivedClass, используя лямбда-выражение, чтобы избежать установки.

public class BaseClass 
{
    public int Id {get; set;}
    public virtual TransactionTypeEnum TransactionType {get; set;}
}

public class DerivedClass: BaseClass 
{
    public override TransactionTypeEnum TransactionType => TransactionTypeEnum.Credit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...