我有通信是“基础”类的类,因为它包含任一选项的共享数据。只能与ComSms或ComEmail进行通信。问题是我不确定如何继续映射。 我想尽可能使用一个存储库来访问对象。
public interface ICommunication
{
}
public Communication: ICommunication{
//PK and FK on this item
public virtual int CommunicationId{get;set;}
public virtual string Name {get;set;}
public virtual string Surname {get;set;}
public virtual DateTime Date{get;set;}
//I am expecting to switch on type between ComSms and ComEmail
public virtual Type {get;set;}
}
public ComSms : Communication{
public virtual string Number {get;set;}
public virtual string Text {get;set;}
}
public ComEmail : Communication{
public virtual string Subject{get;set;}
public virtual string Body {get;set;}
public virtual string Address {get;set;}
}
ICommunication smsToSave = new ComSms()
smsToSave.Name = "UserName";
smsToSave.Surname ="UserSurname";
smsToSave.Date = DateTime.Now;
smsToSave.Type = 1;
smsToSave.Number ="123456789";
smsToSave.Text = "Hello boys";
CommunicationRepository.Save(smsToSave)
答案 0 :(得分:0)
我没有时间写出任何映射,但你需要的是一个鉴别器。这样您就可以说表中有一个CommunicationType
外键,可以链接到Sms
或Email
表。鉴别器的优点在于NHibernate会为您处理一切。
是的,看到你的聚合根是Communication
,那么你可以使用一个存储库来访问你的任何一种通信类型。
答案 1 :(得分:0)
确定 我已经通过处理其中一部分的分离的存储库来解决它
我无法正确绑定它,所以选择解决问题。 如果您发现任何方式,请告诉我