Стефан правильный, используйте компоненты. В FluentNHibernate это будет выглядеть так:
class Branch
{
string Name { get; set; }
DateTime DateOpened { get; set; }
}
class Employee
{
int Id { get; set; }
string Name { get; set; }
Branch Branch { get; set; }
}
class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Id(x => x.Id);
Map(x => x.Name);
Component<Branch>(x => x.Branch, c => {
c.Map(x => x.Name);
c.Map(x => x.DateOpened);
});
}
}
Component<Branch>
можно сократить до Component
, так как компилятор определит тип автоматически. Кроме того, мне нравится предоставлять AsComponent
функцию для класса для моего компонента, поэтому мне не нужно повторяться везде, когда я сопоставляю компонент:
public static class BranchMap
{
public Action<ComponentPart<Branch>> AsComponent()
{
return c =>
{
c.Map(x => x.Name);
c.Map(x => x.DateOpened);
};
}
}
Это также позволяет легко добавлять префиксные / суффиксные функции для случаев, когда у объекта может быть более одного экземпляра компонента с другой схемой именования.