Как использовать поиск значений с NHibernate? - PullRequest
2 голосов
/ 06 сентября 2011

Как вы справляетесь с поиском значений с помощью NHibernate?Например, у меня есть сущность Order, и у нее есть свойство BillingAddress, представляющее собой объект значения с именем Address. Это просто, если объект Address просто содержит свойства State и Country в виде строк.Но что, если я хочу, чтобы страна содержала список своих состояний, форма заказа может заполнять соответствующий раскрывающийся список состояний для каждой выбранной страны.

Могу ли я по-прежнему создавать страну и штат в качестве объектов значений?Или они должны быть сущностями?И если они являются сущностями, может ли Address быть объектом значения?

Ниже приведен пример кода моего примера:

public class Order
{
  public virtual int OrderId { get; set; }
  public virtual Address BillingAddress { get; set; }
}

public class Address
{
  public virtual State State { get; set; }
  public virtual Country Country { get; set; }
}

public class Country
{
  public virtual string Name { get; set; }
  public virtual ICollection<State> States { get; set; }
}

public class State
{
  public virtual string Name { get; set; }
  public virtual Country Country { get; set; }
}

1 Ответ

1 голос
/ 06 сентября 2011

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

Если вы храните их как значения, и они имеют несколько полей, таких как Abbrevation, Name, Coordinates и т. Д., То вы можете сохранить идентификатор в качестве значения в хранилище данных и жестко закодировать данные поиска в виде простого C # учебный класс. Вы просто получите значение id из NHibernate, а затем ваш вызывающий код должен будет запустить методы поиска в классе. Не так элегантно, но упрощенно с точки зрения NHibernate / базы данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...