@saxer

CodeFirst, как получить из базового объекта наследуемые?

Заголовок слегка расплывчатый так как не знаю как его сформулировать кратко.
Суть проблемы:
Допустим у нас есть объект - товар. Товар имеет базовые характеристики(имя, описание, путь к изображению и.т.д.). Товары могут быть разного типа, в моем случае это - простой, сложный и составной. У меня это реализовано наследованием т.е. есть базовый объект товар и от него наследуются другие типы товаров. Entity Fraimwork все товары поместил в одну таблицу и создал в ней дополнительное поле Discriminator в котором хранит название типа объекта.
Теперь самое интересное, у каждого типа товара рассчитывается стоимость по разному(для каждого типа своя логика), как мне реализовать логику , когда например я получаю все товары, и теперь в зависимости от их типа мне нужно рассчитать их стоимость?
Примеры объектов:
public class Product
    {
        public int ProductId { get; set; }
        public string Name { get; set; }
    }

public class SimpleProduct:Product
    {
        public new int GetShopPrice(City city)
        {
            //логика
        }
    }
public class ModuleProduct:Product
    {
        public new int GetShopPrice(City city)
        {
            //логика
        }
    }
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
@MonkAlex
C#, SQL, Delphi, C++ etc
Метод GetShopPrice делается virtual у Product и перекрывается (override) у наследников.
Каждая сущность сама вызовет свой метод.

Проблема то в чем?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ogoun
@Ogoun
Programmer
public abstract class Product
    {
        public int ProductId { get; set; }
        public string Name { get; set; }

        public abstract int GetShopPrice(City city);
    }

    public sealed class SimpleProduct : Product
    {
        public override int GetShopPrice(City city)
        {
            //логика
        }
    }
    public sealed class ModuleProduct : Product
    {
        public override int GetShopPrice(City city)
        {
            //логика
        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы