我有一個分貝設置有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相符。
如果這個級別的繼承是不可能的,請讓我知道。
如果是這樣,你能否請我提供正確的教程或幫助糾正我的班級地圖?
謝謝!