我对nHibernate有点陌生,尤其是流利的,而且在映射类A
扩展类B
的关系时遇到了困难,但是不能保证给定的A
也是B
。下面是到目前为止结构看起来的一个概念(并且它可以接受建议):
public class User
{
public virtual Guid Id;
public virtual string UserName;
public virtual string HashedPassword;
//...
}
public class Student : User
{
public virtual Guid UserId;
public virtual School School;
public virtual float GPA;
}
public class Teacher : User
{
public virtual Guid UserId;
public virtual School School;
public virtual string ClassName;
}
因此,我希望有可以使用的Teacher
和Student
对象,但我也希望能够跟踪它们以进行成员身份验证(因此成为User
基类)。
所以有两个问题:
发布于 2013-07-19 11:46:59
备选案文1
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.HashedPassword);
}
}
public class StudentMap : SubclassMap<Student>
{
public StudentMap()
{
Table("Students");
References(x => x.School);
Map(x => x.GPA);
}
}
public class TeacherMap : SubclassMap<Teacher>
...
表格
Users (
Id, // PK
Name,
HashedPassword
)
Students (
User_Id, // PK, FK
School_id,
Gpa
)
选项2
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");
DiscriminateSubclassesOnColumn("UserType", "user");
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.HashedPassword);
}
}
public class StudentMap : SubclassMap<Student>
{
public StudentMap()
{
DiscriminatorValue("student");
References(x => x.School);
Map(x => x.GPA);
}
}
public class TeacherMap : SubclassMap<Teacher>
...
表格
Users (
Id, // PK
UserType,
Name,
HashedPassword
School_id,
Gpa
Classname
)
选项3
public abstract class UserMap<TUser> : ClassMap<TUser> where TUser : User
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.HashedPassword);
}
}
public class StudentMap : UserMap<Student>
{
public StudentMap()
{
Table("Students");
References(x => x.School);
Map(x => x.GPA);
}
}
public class TeacherMap : UserMap<Teacher>
...
表格
Students (
Id, // PK
Name,
HashedPassword
School_id,
Gpa
)
Teachers (
Id, // PK
Name,
HashedPassword
School_id,
Classname
)
https://stackoverflow.com/questions/17729259
复制