Отображение JSON-кодированной строки в БД в свойство Dictionary моего объекта с помощью NHibernate - PullRequest
2 голосов
/ 01 марта 2010

У меня есть объект, который поддерживает набор свойств различных свойств. Это отображается в моей объектной модели как Dictionary<string, string> и сохраняется в базе данных в виде строки в кодировке JSON.

Как лучше всего отобразить этот класс с помощью Fluent NHibernate?

Вариант 1: сопоставить с частным полем, переводит JSON в мой объект?

Должен ли я сопоставить свойство с частным полем string, а затем выполнить сериализацию в / из JSON в самом объекте?

Pro: NH нужно знать только о отображении одной строки в текстовый столбец, что кажется достаточно простым.

Con: Моя модель должна отслеживать словарь и строку, просто чтобы поддерживать постоянство.

Вариант 2: Использовать какой-нибудь перехватчик?

Я ничего раньше не делал с NH Interceptors, но я знаю из их. Могу ли я использовать перехватчик для сериализации Dictionary / JSON, чтобы моей модели нужно было знать только о словаре?

Вариант 3: Использовать другую стратегию кодирования?

Существует ли другая стратегия кодирования, кроме JSON, которую NH поддерживает изначально и которую я мог бы использовать для сериализации моего словаря?

1 Ответ

2 голосов
/ 01 марта 2010

Чтобы сохранить словарь в виде одного закодированного столбца, используйте IUserType. Вы бы отобразили словарь как свойство, используя свой IUserType. Это сообщение в блоге содержит хороший пример реализации IUserType.

Map( x => x.JsonDictionary )
    .CustomTypeIs<MyUserType>();

Вы также можете отобразить это как набор значений. Это позволяет запрашивать отдельные значения из словаря.

HasMany( x => x.JsonDictionary )
    .WithTableName("entity_jsondictionary")
    .KeyColumnNames.Add("entityid")
    .Cascade.All()
    .AsMap<string>(
        index => index.WithColumn("name").WithType<string>(),
        element => element.WithColumn("value").WithType<string>()
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...