У меня есть структура таблицы, которая выглядит примерно так:
User
-------
UserId
UserName
{several additional fields}
Program
-------
ProgramId
ProgramName
UserId
{several additional fields}
College
-------
CollegeId
CollegeName
{several additional fields}
College_Users
-------------
CollegeId
UserId
Каждая программа связана только с одним пользователем, но каждый колледж может быть подключен к нескольким пользователям.
У меня естьструктура класса, которая выглядит следующим образом:
public abstract class LoggedInUser {
public virtual int UserId { get; set; }
public virtual string UserName { get; set; }
}
public class LoggedInProgram : LoggedInUser {
public virtual int ProgramId { get; set; }
public virtual int ProgramName { get; set; }
}
public class LoggedInCollege : LoggedInUser {
public virtual int CollegeId { get; set; }
public virtual int CollegeName { get; set; }
}
Я смог заставить Программу работать, используя следующие сопоставления:
public class LoggedInUserMap : ClassMap<LoggedInUser> {
public LoggedInUserMap() {
Table("Users");
Id(x => x.UserId).Column("UserId");
Map(x => x.UserName);
}
}
public class LoggedInProgramMap : SubclassMap<LoggedInProgram> {
public LoggedInProgramMap() {
Table("Program");
KeyColumn("UserId");
Map(x => x.ProgramId);
Map(x => x.ProgramName);
}
}
Однако я не могу понять, какполучить колледж для сопоставления с этой структурой класса.
Я могу написать простой запрос, который даст мне результаты, которые я хочу, но не могу понять, как написать сопоставление, которое даст мне те же результаты.Запрос выглядит следующим образом:
select c.CollegeId
, c.CollegeName
, u.UserId
, u.UserName
from College c
inner join dbo.College_Users cu on c.CollegeId = cu.CollegeId
inner join Users u on cu.UserId = u.UserId
Итак, мой вопрос состоит из двух частей: возможно ли заставить FluentNhibernate сделать это отображение, и если да, то как мне это сделать?