Как сопоставить класс сущности группы из столбца «имя группы» в NHibernate?
-
21-09-2019 - |
Вопрос
В моей базе данных есть таблица, которая выглядит примерно так:
create table Foo (
Id int identity not null,
Name varchar(100) not null,
GroupName varchar(100) not null,
constraint PK_Foo primary key (Id)
)
Теперь я хочу сопоставить эту таблицу с двумя классами сущностей следующим образом:
class Foo {
public virtual in Id { get; private set; }
public virtual string Name { get; set; }
public virtual Group Group { get; set; }
}
class FooGroup {
public virtual string Name { get; set; }
public virtual ISet<Foo> Foos { get; private set; }
}
Возможно ли это с NHibernate?Я пытался выполнить поиск в сети и в документации NH, но я действительно не знаю, что искать - идеи для поисковых запросов будут оценены по достоинству.
Может быть, я смогу составить карту для FooGroup
который использует специальный запрос HQL/SQL для выбора отдельных имен групп и другой специальный запрос для выбора соответствующего набора содержащихся элементов?
Решение
Я не думаю, что можно делать то, что вы хотите, исключительно в сопоставлении NHibernate...хотя кто-то другой может доказать мою неправоту :-)
OTOH, довольно легко определить прямое сопоставление вашей таблицы с:
class RawFooData
{
public virtual in Id { get; private set; }
public virtual string Name { get; set; }
public virtual string GroupName { get; set; }
}
а затем обработайте это, чтобы получить нужные значения:
IEnumerable<FooGroup> groups = allRawFooData.Select(data => data.GroupName)
.Distinct()
.Select(name => new FooGroup()
{
Name = name
});
foreach(var group in groups)
{
group.Foos = allRawFooData.Where(data => data.GroupName == group.Name);
}
Я думаю, вы обнаружите здесь проблемы с производительностью только в том случае, если имеете дело с очень большими объемами данных (например,10 тыс. строк и более).