Наследование C# и доступ к данным, хранящимся в SQL

Мне трудно понять, как извлечь данные из SQL и сохранить их в соответствующий подтип. Например, у меня есть система инвентаризации. У меня есть базовый класс под названием «Assets», и у меня есть следующие подклассы, которые простираются от » Assets»:
1. Ноутбук (имеет поля скорости и памяти)
2. MobileDevice (имеет поля esn и PIN)

Каждый подкласс имеет свои собственные уникальные поля (как показано выше) и они совместно используют общие поля (например, make, model, serial no. так далее…). Мой вопрос заключается в том, что если кто-то выполняет поиск всех активов для конкретного пользователя через веб-страницу, resultset будет включать любое количество этих различных типов. Если я нажму на «Просмотр сведений» для iPhone, как я скажу странице, чтобы загрузить MobileDevice против ноутбука. Прямо сейчас, я могу только вытащить результаты как актив, но тогда я пропускаю эти уникальные поля. Это вообще возможно? Я не могу найти ничего в интернете. это просто вопрос кастинга? Пожалуйста, помогите! Обратите внимание: я использую C#, но не LINQ. Просто хранимые процедуры и т.д… Ценю любую помощь.

1 ответ

  1. Во-первых, основная проблема заключается в несоответствии между реляционным и объектно-ориентированным дизайном. Это то, что не кажется большой проблемой, пока вы не начнете смотреть на нее. Первое, что следует отметить, что идея реляционный дизайн и идеальный дизайн ОО отличаются, потому что они настроены вокруг различных проблем. Реляционный дизайн фокусируется на функциональных зависимостях в математическом смысле (f(x) = y), в то время как OO дизайн фокусируется на инкапсуляции состояния за интерфейсом. Различные цели-это то, что создает эту проблему в первую очередь.

    Поэтому первое, что нужно сделать, это понять, что ваш вопрос предполагает конструкцию соединения, которое не должно существовать. Итак, как бы я попытался решить эту проблему.

    Вы начинаете с дерева наследования в приложении, как так:

    • Супертип
      • Подтип 1
      • Подтип 2
      • Подтип 3

    В среде базы данных данные супертайпа будут представлены подмножеством столбцов из одной или нескольких таблиц. Подтипы будут иметь 0 и более дополнительных полей из тех или иных таблиц.

    У вас есть несколько способов решения этой проблемы.

    1. Многие ORM имеют функции для обработки таких проблем для вас, или
    2. Сопоставление присоединяется к подтипу и полностью переопределяет подтип супертайпа.

    Если вы уже используете ОРМ, то для его решения существует наилучший подход. Если вы пишете SQL от руки где-то, то обычно второй метод чище (и среди прочего позволяет улучшить полиморфизм, так что вы можете получить лучший OO и лучший реляционный дизайн).