Я мог бы переписать статью, но думаю, что позволю ей стоять самостоятельно: http://marekblotny.blogspot.com/2009/03/fluent-nhibernate-and-inheritance.html
EDIT:
Работая в духе статьи, я бы попробовал следующее (и я действительно не знаю, сработает ли это):
Написать сообщение map:
public class MessageMap : ClassMap<Message> {
public MessageMap() {
Id(x=>x.Id).GeneratedBy.Native();
// only the common stuff
DiscriminateSubClassesOnColumn<int>("MessageType")
.SubClass<SMSMessage>(1, m=>m.HasOne( x=>{
Map(x=>x.ToMobile);
Map(x=>x.FromMobile);
// etc
})
.Cascade.SaveUpdate()
.FetchType.Join())
.SubClass<EmailMessage>(2, m=>m.HasOne(x=>{
Map(x=>x.ToEmail);
Map(x=>x.FromEmail);
// etc
})
.Cascade.SaveUpdate()
.FetchType.Join())
}
}
Мы сейчас будем делать смс ...
public class SMSMessage : Message {
public virtual string ToMobile { get; set; }
public virtual string FromMobile { get; set; }
...
}
Вот класс отображения ...
public class SMSMessageMap : ClassMap<SMSMessage> {
public SMSMessageMap() {
WithTable("Queue");
Id(x=>x.Id, "QueueID").GeneratedBy.Foreign("Message");
Map(x=>x.ToMobile, "To");
Map(x=>x.FromMobile, "From");
WithTable("Message", m=>
{
m.Map(x=>x.MessageBody);
});
}
}