Как читать динамические свойства из базы данных

Я постараюсь объяснить свой сценарий как можно лучше. У меня есть следующие таблицы в моей базе данных:

Products{ProductId, CategoryId ...}
Categories{CategoryId ...}
CategoryProperties{CategoryPropertyId, CategoryId, Name ...}
PropertyValues{ProductId, CategoryPropertyId, Value ...}

Таким образом, цель состоит в том, чтобы иметь список продуктов, которые принадлежат к какой-либо категории, и каждая категория может иметь «n» количество свойств со значениями в 'PropertyValues' Таблица. У меня есть запрос, который возвращает данные на основеCategoryId» поэтому я всегда могу получить разные результаты из базы данных:

Для категории CPU:

intel i7 | CPU | Model | Socket | L1 Cash | L2 Cahs | etc.

Для категории HDD:

samsung F3 | HDD | Model | Speed | GB | etc.

Поэтому, основываясь на категориях из моего запроса, в результате я всегда могу получить разные номера столбцов и имена. Для доступа к базе данных я использую простой вызов ADO.NET для хранимой процедуры, которая возвращает результат. Но потому что результат запроса является динамическимс природой я неНе знаю, как правильно читать эти данные.

я сделалProduct сущность, ноЯ запутался, как это сделать реально :( Я думал, что я могу сделатьProduct сущность и сделать другие сущности, которыеунаследовать Product лайк , , , , , ,CpuHddCameraPcCaseGraphicCardMobilePhoneGps и т.п.



но я думаюэто'глупый потому что я могу покончить с этим200+ сущностей в домене.



Что бы вы сделали в такой ситуации?

Как читать и где это поставитьдинамические свойства?



ОБНОВЛЕНИЕ - какое-то решение



Все в порядке на основе@millimoose предложение дляDictionary а также@ Тим Шмельтер идея использоватьDataTable объект я пришел к какому-то решению.

Теперь ... это работает, я получаю данные, читаю их и могу отображать их.

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

public class Product
    {
        public Product()
        {
            this.DynamicProperties = new List();
        }

        public List DynamicProperties { get; set; }

    }
...
List products = new List();
...
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
                {
                    DataTable t = new DataTable();
                    a.Fill(t);

                    Product p = null;

                    foreach (DataRow row in t.Rows)
                    {
                        p = new Product();
                        foreach (DataColumn col in t.Columns)
                        {
                            string property = col.ColumnName.ToString();
                            string propertyValue = row[col.ColumnName].ToString();

                            Dictionary dictionary = new Dictionary();

                            dictionary.Add(property, propertyValue);

                            p.DynamicProperties.Add(dictionary);
                        }

                        products.Add(p);
                    }
                }

Ответы на вопрос(2)

Ваш ответ на вопрос