我有两张看起来像这样的表
Table Queue
int ID;
string Name;
int MessageID;
string To
string From
string Topic
string Email
Table Message
int ID
int MessageType
这是一个相当简化的版本,但我们在课程中所做的是创建一个名为
的类 class Queue
int ID
string Name
Message message
然后我们有一个带有任何类型消息的抽象消息。
class abstract Message()
class SMSMessage : Message
string ToMobile
string FromMobile
string Message
class EmailMessage
string ToEmail
string FromEmail
string Topic
string Email
然而,现在我的问题是弄清楚如何用流利的Nhibernate来映射它。 我该怎么做?
答案 0 :(得分:4)
我可以改写这篇文章,但我想我会允许它自立:http://marekblotny.blogspot.com/2009/03/fluent-nhibernate-and-inheritance.html
编辑:
运行本文的精神,我会尝试以下(我真的不知道这是否有效):
撰写留言地图:
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);
});
}
}