Это решение, которое мы впервые предложили на форумах ASP.NET (позже он стал Community Server), и что команда ASP.NET создала аналогичную версию в членстве ASP.NET 2.0, когда выпустила ее:
Сумки свойств на объектах вашего домена
Например:
Event.Profile () или, в вашем случае, Event.Extras ().
По сути,Свойство bag представляет собой сериализованную коллекцию данных, хранящихся в паре имя / значение в столбце (или столбцах).Членство в ASP.NET 2.0 пошло по пути сохранения имен в списке, разделенном точкой с запятой, и значений в них:
Таблица: aspnet_Profile Столбец: PropertyNames (разделенный точками с запятой и имеющий начальный индекс иконечный индекс) Столбец: PropertyValues (разделенный точками с запятой и хранящий только строковое значение)
Недостатком этого подхода является то, что это все строки, и его необходимо анализировать вручную (даже если система членства делает этоэто для вас автоматически).
Недавно мой текущий метод состоит в том, что я создал методы расширения FormCollection и NameValueCollection C #, которые автоматически сериализуют коллекции в результат XML.И я храню этот XML в таблице в своем собственном столбце, связанном с этим объектом.У меня также есть расширение десериализатора C # для XElement, которое десериализует эти данные обратно в коллекцию во время выполнения.
Это дает вам возможность фактически запрашивать эти свойства в XML через SQL (хотя это может быть медленным, хотя -всегда выравнивать ваши данные только для чтения).
Последнее замечание - запросы во время выполнения: общее правило, которое мы соблюдаем, заключается в том, что если вы собираетесь запрашивать свойство объекта в обычной логике приложения, вы перемещаете егосвойство фактического столбца в таблице - и создать соответствующие индексы.Если эти данные никогда не будут запрошены напрямую (например, Linq-to-Sql или EF), оставьте их в пакете свойств XML.
Property Bags дает вам возможность расширять ваши доменные модели без необходимости изменять схему БД.