Я также не уверен, что делать при ссылке на сущность из компонента. Я сделал это сам (с государственным образованием, не меньше).
Что касается отображения, это довольно просто:
public class MyEntityMap : ClassMap<MyEntity>
{
public MyEntityMap()
{
Id(x => x.id);
Component<Address>(x => x.location, c =>
{
c.Map(x => x.street);
c.Map(x => x.zip);
c.References<State>(x => x.state);
});
Map(x => x.status);
}
}
Иногда я добавляю статический класс для компонента, чтобы сделать ClassMap немного лучше:
public static class NameMap
{
public static Action<ComponentPart<Name>> AsComponent(string prefix)
{
return c =>
{
c.Map(x => x.Title, ColumnName(prefix, "Title"));
// and so on
};
}
}
В этом случае ColumnName - это простая функция, которая присоединяет префикс к имени столбца (что очень удобно в замечательных устаревших БД, в которых я могу играть).
Затем в ClassMap вы просто делаете:
Component<Name>(x => x.Name, c => NameMap.AsComponent("prefix"));