Как сопоставить словарь со сложным типом ключа (CultureInfo), используя FluentNHibernate - PullRequest
6 голосов
/ 29 апреля 2011

У меня есть словарь, который я создаю, используя Fluent NHibernate. Словарь имеет тип сложного ключа CultureInfo. Моя база данных не может хранить этот тип, поэтому я хочу использовать его строковое представление.

В сопоставлениях, отличных от отображений в словарях, я могу успешно сопоставить CultureInfo -свойства, используя соглашение о типе пользователя. Теперь я задаюсь вопросом, как это сделать для диетических сопоставлений.

Вот сущность, которая содержит словарь:

public class MultilingualPhrase : Entity
{
    private IDictionary<CultureInfo, string> languageValues;

    public virtual IDictionary<CultureInfo, string> LanguageValues
    {
        get
        {
            return languageValues;
        }
    }
}

А вот переопределение автоматического сопоставления для сущности:

public void Override(AutoMapping<MultilingualPhrase> mapping)
{
    mapping
        .HasMany(n => n.LanguageValues)
        .Access.ReadOnlyPropertyThroughCamelCaseField()
        .AsMap<string>("CultureName")
        .Element("Phrase")
        .Table("MultilingualPhraseValues");
}

Это отображение (очевидно) вызывает следующую ошибку:

Не удалось преобразовать значение параметра из CultureInfo в строку.

Я знаю, что в NHibernate есть реализация пользовательского типа для CultureInfo (я использую его для свойств сопоставления), но как мне указать это в переопределении сопоставления?

1 Ответ

1 голос
/ 06 мая 2011

Это прекрасно работает с FNH ClassMap (не уверен в автоматическом сопоставлении) в NH 3.1 и FNH 1.2:

HasMany(n => n.LanguageValues)
    .Access.ReadOnlyPropertyThroughCamelCaseField()
    .AsMap<CultureInfo>("CultureName")
    .Element("Phrase")
    .Table("MultilingualPhraseValues");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...