Имея таблицу с именем ChildTable
с 2-мя колоннами SourceTable
и SourceId
и некоторых других таблиц ParentTable1
, ParentTable2
и т.д.Как скопировать ссылку таблицы переменных NHibernate?
Идентификатор найденными в SourceId
может быть использован для соединения к родительской таблице, когда SourceTable
имеет значение, связанное с этим таблица (1 ->ParentTable1
, 2 ->ParentTable2
). Например, чтобы получить все ChildTable
строк, которые связаны со строками в ParentTable1
это будет достигнуто с этим запросом:
select *
from ChildTable ct
join ParentTable1 pt1
on ct.SourceTable = 1 and ct.SourceId = pt1.Id
Я хотел бы, чтобы сопоставить эти 2 ChildTable
столбцов 1 собственности на родительскую таблицу: Parent1, Parent2 ... так что один из них будет не нулевым, а остальная часть родительских свойств будет нулевым:
public class ChildClass
{
public Parent1Class Parent1 { get; set; }
public Parent2Class Parent2 { get; set; }
public Parent3Class Parent3 { get; set; }
.
.
.
}
Вопрос: как написать отображение для этого случая (отображение с помощью кода, если это возможно)?
Примечание: это для сопоставления существующих таблиц, реорганизация схемы таблиц еще не является решением (но предложения приветствуются).
Update
Для запрашивая его, кажется, достаточно, чтобы отобразить свойство ChildClass Parent1 с:
ManyToOne(property => property.Parent1, map => map.Formula("(select pt1.Id from dbo.ParentTable1 pt1 where SourceTable = 1 and pt1.Id = SourceId)"));
и сбор детей из Parent1Class с:
mapper.Where("SourceTable = 1");
Для обновления/вставки, вероятно, можно воспользоваться с помощью аксессуаров, позже опубликует обновление.
В ваших желаемых ChildClass являются все свойства типа Parent1Class, или они являются Parent1/2/3Class? –
А, спасибо, что заметили, это была опечатка, они разные. –
У вас есть условие, в котором вы хотите отфильтровать сопоставление «много-к-одному» с предложением where - на основе SourceId. Можете ли вы подтвердить, что SourceIds исправлены? Казалось бы, для этого существует неразрешенная [jira] (https://nhibernate.jira.com/browse/NH-2874). –