Отображение списка целых в NHibernate - PullRequest
1 голос
/ 16 сентября 2010

В руководстве по NHibernate я нашел такое отображение:

<bag name="Sizes" table="SIZES" order-by="SIZE ASC">
    <key column="OWNER"/>
    <element column="SIZE" type="Int32"/>
</bag>

Не могу не задаться вопросом, зачем кому-то делать что-то подобное?Есть ли что-то лучшее в отображении простых целых чисел, чем создание сущности, соответствующей заданному целому числу (сущность размера в этом сценарии) и создание истинного отношения один ко многим?

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Требования вашего бизнес-домена, в котором работает ваше приложение, будут определять, должен ли у вас быть список целых (набор типов значений) или список сущностей.Если есть хороший вариант использования для IList<int>, то непременно сделайте это, и пусть NHibernate отобразит эту ассоциацию соответственно.В противном случае просто удалите его.

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

Я часто использую это в своих моделях доменов.Сейчас у меня есть много «приложений Twitter», которые индексируют твиты на основе поиска «Ключевые слова», поэтому я сопоставил его так:

public class TwitterApplication
{
    public virtual int Id { get; set; }
    public virtual string ApplicationName { get; set; }

    // other properties (snip)

    public virtual ISet<string> Keywords { get; set; }
}

Я использую это сопоставление, потому что знаю, что:

  1. Количество ключевых слов будет небольшим (примерно 4 - 6)
  2. Я не заинтересован в сохранении ключевого слова DateAdded и т. Д.
  3. Я не собираюсь делатьПейджинг или запросы по ключевым словам, просто извлекайте их все одновременно или не выполняйте вовсе

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

1 голос
/ 16 сентября 2010

Вопрос не в том, хотите ли вы отобразить это так, а в том, нужен ли вам список целых в вашей модели.

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

Итак, как вы думаете, полезно ли иметь список целых в классе? Или список гидов, перечислений, двойников?

class Graph
{
  IList<double> Values { get; private set; }
}

Разве это не имеет смысла для тебя?

...