Я столкнулся с довольно интересным сценарием картирования. У меня есть две сущности (Task
и ProjectEmployeeFile
), которые имеют два одинаковых внешних ключа (ProjectId
и EmployeeId
).
Я пытаюсь найти элегантный способ сопоставления свойства Tasks
с сущностью ProjectEmployeeFile
.
Я думаю, что решение для одного отношения внешнего ключа было бы с использованием троичной ассоциации, но я понятия не имею, как спроецировать это на несколько внешних ключей.
Я использую свободный nhibernate, но если решение этой проблемы с классическими файлами hbm - это путь, у меня нет проблем с отображением этих классов вручную.
Любая помощь будет принята с благодарностью.
Я нарисовал базовую диаграмму, чтобы попытаться проиллюстрировать сценарий:
![A basic diagram to try to illustrate my scenario](https://i.stack.imgur.com/elf7g.png)
Здесь я свободно смешал имена свойств с именами столбцов базы данных, но я думаю, что общая идея ясна.
обновление
Чтобы уточнить модель предметной области, вот текущие сущности и сопоставления, сведенные к минимуму:
public class Task
{
public virtual int Id { get; private set; }
public virtual Project Project { get; set; }
public virtual Employee Employee { get; set; }
}
public class ProjectEmployeeFile
{
public virtual int Id { get; private set; }
public virtual Project Project { get; set; }
public virtual Employee Employee { get; set; }
}
public class Project
{
public virtual int Id { get; private set; }
public virtual IList<Task> Tasks { get; set; }
}
public class Employee
{
public virtual int Id { get; private set; }
public virtual IList<Task> Tasks { get; set; }
}
public class TaskMap : ClassMap<Task>
{
public TaskMap()
{
Table("Tasks");
Id(x => x.Id);
References(x => x.Project).Column("ProjectId");
References(x => x.Employee).Column("EmployeeId");
}
}
public class ProjectEmployeeFileMap : ClassMap<ProjectEmployeeFile>
{
public ProjectEmployeeFileMap()
{
Table("ProjectEmployeeFiles");
Id(x => x.Id);
References(x => x.Project).Column("ProjectId");
References(x => x.Employee).Column("EmployeeId");
}
}