Свободное NHIbernate Autopping Список <string>? - PullRequest
12 голосов
/ 21 декабря 2009

Свободный NHibernate не нравится, выдает ошибку:

{"Ассоциация ссылается на несопоставленный класс: System.String"}

Ладно, хорошо, я понимаю, почему это может вызвать проблемы, но какое решение лучше?

Я не хочу, чтобы он хранил разделенный список строк в одном поле, это было бы ужасно, если бы мой список содержал много строк.

Мне также не нужна таблица 'string' по понятным причинам.

Полагаю, я могу решить эту проблему, обернув свой List<string> внутри класса, но это немного тяжеловесно. Я начинаю думать, что это лучшее решение.

Какой лучший способ заставить Fluent NHibernate справиться с этим?

Я полностью ожидаю, что эти значения будут храниться в другой таблице. Я подумал, что, возможно, мне удалось установить какое-то соглашение об автоматическом преобразовании, которое инструктирует NHibernate: «Если вы видите class X, который содержит List<*some primitive type*>, тогда продолжайте и автоматически создайте справочную таблицу, которая сопоставляется с этой коллекцией.

Чувствовать себя немного тяжело, чтобы пойти и завернуть каждую коллекцию в классе. Однако, если это лучшее решение, пусть будет так.

Ответы [ 3 ]

7 голосов
/ 23 декабря 2009

У меня была точно такая же проблема несколько недель назад, с плавающими вместо строк.

как-делать-вы-автокарту-listfloat или-поплавок-с беглым-NHibernate

Оказывается, что Automapping не работает с примитивными типами.

Редактировать - это больше не так - команда FNH устранила проблему

В принятом ответе на мой вопрос содержится много примеров кода, но ключевой момент заключается в том, чтобы добавить переопределение для ваших списков примитивных типов (в следующем примере «RawY»):

public class DlsAppOverlordExportRunData
{
    public virtual int Id { get; set; }
    // Note: List<float> needs overrides in order to be mapped by NHibernate.
    // See class DlsAppOverlordExportRunDataMap.
    public virtual IList<float> RawY { get; set; }
}


// Must be in different namespace from DlsAppOverlordExportRunData!!!
public class DlsAppOverlordExportRunDataMap : IAutoMappingOverride<DlsAppOverlordExportRunData>
{
    public void Override(AutoMapping<DlsAppOverlordExportRunData> mapping)
    {
        // Creates table called "RawY", with primary key
        // "DlsAppOverlordExportRunData_Id", and numeric column "Value"
        mapping.HasMany(x => x.RawY)
               .Element("Value");
    }
}

Я ожидаю, что такой же подход будет работать с списками строк.

4 голосов
/ 05 октября 2010

С тех пор, как я опубликовал свой первый ответ, команда Fluent NHibernate исправила эту проблему.

Теперь вы можете автоматизировать списки типов значений C # (строки, целые, числа с плавающей запятой и т. Д.).

Просто убедитесь, что у вас последняя версия FNH.

1 голос
/ 22 декабря 2009

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

...