Помогите при попытке связать две таблицы с общим столбцом базы данных в nHibernate, используя HasOne - PullRequest
0 голосов
/ 03 февраля 2011

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

Я пытаюсь использовать отношение HasOne между двумя таблицами (я также вижу, как это может вписаться в ManyToOne), но я просто не могу заставить что-либо работать с правильными результатами ... Исчерпав свой кеш GoogleТеперь я надеюсь, что кто-то сможет быстро рассказать о том, что я делаю неправильно.

Первая таблица называется «Отчет», которая хочет загрузить объект из другой таблицы, называемой «Операционная система»;Оба имеют общее поле «Report_Number»

Классы модели выглядят следующим образом:

  public class ReportModel
  {
    public virtual int Report_Number { get; set; }
    public virtual OperatingSystemsModel OperatingSystem { get; set; }
  }
  public class OperatingSystemsModel
  {
    public virtual string OS_Name { get; set; }
    public virtual int Report_Number { get; set; }
  }

* Важное отличие от обычной ситуации состоит в том, что две записи индексируются через Report_Number, а неотчет, имеющий индекс в операционной системе.

Отображения таблиц выглядят следующим образом:

public ReportMap()
{
  Table("pcd_PROBLEM40");
  Id(x => x.Report_Number).Column("Report_Number").GeneratedBy.Native();
  HasOne(x => x.OperatingSystem).PropertyRef(x => x.Report_Number).ForeignKey("Report_Number");
}
public OperatingSystemsMap()
{
  Table("pcd_os_names");
  Id(x => x.Report_Number).Column("Report_Number").GeneratedBy.Native();
  Map(x => x.OS_Name);
}

Цель состоит в том, чтобы объект OperatingSystem объекта ReportModel правильно заполнялся из общего поля Report_number.

Я пробовал различные комбинации HasOne () с PropertyRef () и ForeignKey (), но, похоже, не могу получить такую, которая работает.Я продолжаю получать следующее исключение, когда пытаюсь получить отчет.

{"Неизвестный столбец 'operatings2_.Report_Number' в 'списке полей'"}

public static ReportModel GetReport(int i_iReportNumber)
{
  ICriteria criteria = Session.CreateCriteria(typeof(ReportModel));
  criteria.Add(Restrictions.Eq("Report_Number", i_iReportNumber));
  return criteria.UniqueResult<ReportModel>();
}

Любое понимание будет очень, высоко ценится!

1 Ответ

0 голосов
/ 03 февраля 2011

Попробуйте:

HasOne (x => x.OperatingSystem);

Или

HasOne (x => x.OperatingSystem) .Constrained ();

Также посмотрите этот пост на brunoreis.com для получения дополнительной информации о синтаксисе HasOne:

...