Свободное автопроизводство NHIbernate в List <string>?
Fluent NHibernate не нравится это, вызывая ошибку:
{ "Ассоциация ссылается на unmapped class: System.String" }
Хорошо, я понимаю, почему это вызовет проблему, но какое лучшее решение?
Я действительно не хочу, чтобы он хранил список строк с разделителями в одном поле, это было бы уродливо, если бы в моем списке было много строк.
Я также не хочу, чтобы строка "строка", по очевидным причинам.
Я думаю, я могу решить это, обернув мой List<string>
внутри класса, но это немного тяжело. Я начинаю думать, что это лучшее решение, хотя.
Какой лучший способ заставить Fluent NHibernate справиться с этим?
Я полностью ожидаю, что эти значения будут сохранены в другой таблице. Я подумал, возможно, что, возможно, мне удалось установить какое-либо соглашение об автопостановке, которое инструктирует NHibernate. Если вы видите class X
, который содержит List<*some primitive type*>
, тогда вперед и автоматически создайте ссылочную таблицу, которая отображается в этой коллекции.
Чувствуется немного тяжелым, чтобы обернуть каждую отдельную коллекцию в классе. Если это наилучшее решение, то и так.
Ответы
Ответ 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? Вы устанавливаете другой класс со свойством "много-к-одному" и "строка". Затем вы сопоставляете коллекцию этого класса.