【发布时间】:2011-12-23 05:02:41
【问题描述】:
下面显示的映射有什么问题?这是 GeneratedBy.Foreign() 的问题吗?我应该如何使用它,因为我在 UserTable(UID) 中的 PK 也是指 PersonTable PK(PID) 的 FK。我收到重复的类/实体映射控制台MappingTest.SystemUser 错误。你有什么建议(一定要看看数据库结构——没有办法改变它)。谢谢。
继承结构:
public class Person
{
public virtual int ID { get; set; }
}
public class User:Person
{
public override int ID
{
get
{
return base.ID;
}
set
{
base.ID = value;
}
}
public virtual string Name { get; set; }
public virtual int Salary { get; set; }
}
public class SystemUser:User
{
public virtual int Password { get; set; }
}
数据库结构:
用于保存有关人员的一些信息(此处未显示某些字段):
PersonTable(PID)
用于保存用户及其所有子类,如系统用户:
UserTable(UID,Name,Salary,Type)
这是我的映射:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Table("PersonTable");
Id(x => x.ID, "PID").GeneratedBy.Assigned();//or HiLo-not important
}
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("UserTable");
DiscriminateSubClassesOnColumn("Type").Default("U");
Id(x => x.ID, "UID").GeneratedBy.Foreign("Person");//how should use this?
Map(x => x.Salary);
Join("PTable", j =>
{
j.KeyColumn("UID");
j.Map(x => x.Name);
});
}
}
public class SystemUserMap : SubclassMap<SystemUser>
{
public SystemUserMap()
{
DiscriminatorValue("SU");
Map(x => x.Password);
}
}
【问题讨论】:
标签: nhibernate class mapping hierarchy fluent