Подтвердить что ты не робот

Свободное автопроизводство NHIbernate в List <string>?

Fluent NHibernate не нравится это, вызывая ошибку:

{ "Ассоциация ссылается на unmapped class: System.String" }

Хорошо, я понимаю, почему это вызовет проблему, но какое лучшее решение?

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

Я также не хочу, чтобы строка "строка", по очевидным причинам.

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

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

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

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

4b9b3361

Ответ 1

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

how-do-you-automap-listfloat-or-float-with-fluent-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");
    }
}

Я бы ожидал такого же подхода к работе с IList строк.

Ответ 2

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

Теперь вы можете автоматизировать ILists типов значений С# (строки, ints, float и т.д.).

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

Ответ 3

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