Я использую 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(), но не нашел подходящей. Я продолжаю получать следующее исключение, когда пытаюсь получить отчет.
{"Неизвестный столбец 'operations2_.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>();
}
Любые идеи будут очень, очень оценены!