我有一个分贝设置有3个表功能NHibernate传承问题
t_DataItem
pk id int auto
isActive bit 0
dateCreated datetime getdate()
parentId int null
t_User
pk id int
firstName varchar(50)
lastName varchar(50)
t_Email
pk id int
address varchar(50)
所以现在我有3类,每一个代表相应的项目,但是User和电子邮件从DataItem的继承。
public class DataItem
{
public virtual int Id { get; private set; }
public virtual DateTime DateCreated { get ; set; }
public virtual bool IsActive { get; set; }
public virtual DataItem Parent { get; set; }
public DataItem()
{
DateCreated = DateTime.Now;
}
}
public class Email : DataItem
{
public virtual string Address { get; set; }
}
public class User : DataItem
{
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual IList<Email> Emails { get; private set; }
public User()
{
Emails = new List<Email>();
}
public virtual void AddEmail(Email email)
{
Emails.Add(email);
}
}
所以,当我保存用户或电子邮件时,应先保存DataItem的记录,通过它的id到的用户或电子邮件ID(任何子类真的)。
我有一个部分的工作..我的问题就出在映射建立
的DataItem映射到在对应于电子邮件的用户映射一个参考家长和的hasMany。
我不能让它保存电子邮件,与它的DataItem的ParentId填写到User.Id
所以,如果我有一个用户记录,我应该有一个相应的DataItem记录
如果我有一个电子邮件记录,我应该有一个相应的dataItem记录,它的parentId设置为用户记录ID的ID。
希望我解释说,正确的...
是否有人可以告诉我的我将如何使用功能NHibernate映射了这一点的例子吗?
我的映射如下
public class DataItemMap : ClassMap<DataItem>
{
public DataItemMap()
{
Table("t_DataItem");
Id(map => map.Id);
Map(map => map.DateCreated).Nullable();
Map(map => map.IsActive);
References(map => map.Parent).Column("parentid");
}
}
public class EmailMapping : SubclassMap<Email>
{
public EmailMapping()
{
Table("t_emails");
KeyColumn("id");
Map(email => email.Address);
}
}
public class UserMapping : SubclassMap<User>
{
public UserMapping()
{
Table("t_Users");
KeyColumn("id");
Map(user => user.FirstName);
Map(user => user.LastName);
HasMany(user => user.Emails).KeyColumn("id").Cascade.All();
}
}
我喜欢它如何自动创建DataItem的记录,并抓住它的ID,并将其存储到我的用户或电子邮件表..现在如果我能得到的最后一块当我保存电子邮件时,不仅会保存dataitem记录,而且还会填充残留物,然后当我为用户提供电子邮件时,它会检查用户ID是否与加入时的父ID相符。
如果这个级别的继承是不可能的,请让我知道。
如果是这样,你能否请我提供正确的教程或帮助纠正我的班级地图?
谢谢!