сохранение и извлечение из структуры таблицы EAV с использованием полиморфизма - PullRequest
1 голос
/ 29 сентября 2010

У меня есть таблица атрибутов, подобная следующей

Attributes
attributeid   backendtype   code            displayname
1             int           size            Product Size
2             text          description     Product Description

тогда у меня есть таблицы атрибутов продукта

ProductAttributes_ints
id     attributeid          productid       value(int)
1      1                    1               20

ProductAttributes_texts
id     attributeid          productid       value(text)
1      2                    1               my product description

Для сохранения атрибутов товара я использую этот код

public void SaveAttribute(int productId, int attributeId, string backendType, string value)
        {
            if (!String.IsNullOrEmpty(value))
            {
                switch (backendType)
                {
                    case "int":
                        int valueInt = Convert.ToInt32(value);
                        SaveAttributeInt(productId, attributeId, valueInt);
                        break;
                    case "text":
                        SaveAttributeText(productId, attributeId, value);
                        break;
                    case "decimal":
                        decimal valueDecimal = Convert.ToDecimal(value);
                        SaveAttributeDecimal(productId, attributeId, valueDecimal);
                        break;
                    case "varchar":
                        SaveAttributeVarchar(productId, attributeId, value);
                        break;
                    default:
                        break;
                }
            }
        }

и для получения значения атрибута товара я использую этот код

public string GetProductAttributeValue(string code)
        {
            Attribute attribute = _attributeRepository.GetAttributeByCode(code);

            if (attribute != null)
            {
                switch (attribute.BackendType)
                {
                    case "int":
                        var productAttributeInt = this.ProductAttributes_ints.Where(a => a.Attribute.Code == code).FirstOrDefault();
                        if (productAttributeInt != null)
                        {
                            if (productAttributeInt.Value != null)
                            {
                                return productAttributeInt.Value.ToString();
                            }
                            else
                            {
                                return null;
                            }
                        }
                        else
                        {
                            return null;
                        }
                        ... repeated for all other datatypes

Я повторяю это утверждение в нескольких разных местах и ​​хотел бы знать, как я могу заменить его, используя полиморфизм?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...