C# 自由基继承问题
我有一个带有3个表的数据库设置C# 自由基继承问题,c#,inheritance,fluent-nhibernate,C#,Inheritance,Fluent Nhibernate,我有一个带有3个表的数据库设置 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和Email都继承
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和Email都继承自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映射具有对父级的引用,并且在UserMap中具有与电子邮件对应的多个
我无法让它保存电子邮件,因为它的DataItem ParentId已填写给用户。Id
所以,如果我有一个用户记录,我应该有一个相应的dataitem记录
如果我有一个电子邮件记录,我应该有一个相应的dataItem记录,其parentId设置为用户记录id的id
希望我已经解释对了
有人能给我举一个例子,说明我如何使用Fluent 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记录,而且填写parentid,然后当我为一个用户提取电子邮件时,它会根据加入上的父id检查用户id
如果无法实现此级别的继承,请告诉我
如果是的话,你能为我提供适当的教程或帮助,纠正我的课堂地图吗
谢谢 找到了答案
我必须更改HasMany映射以包含数据项类型,以便它知道
从DataItem表而不是我的电子邮件表(该字段不存在)中提取字段parentId
HasMany<DataItem>(user => user.Emails).KeyColumn("parentid").Cascade.All();
很棒的工具。。非常强大
public virtual void AddEmail(Email email)
{
email.Parent = this; //forgot to set it's parent..
Emails.Add(email);
}