【发布时间】:2010-07-21 13:38:00
【问题描述】:
这个问题真的是要确定我试图实现的目标是否可行。
我有三个表,我将省略实际名称以使其简单且不那么混乱
所以我们有
人 [ PID - 唯一标识符 PK ]
申请人 [ PID - 唯一标识符 PK, AID - varchar(20)]
学生 [ PID - 唯一标识符 PK, SID - 整数]
student 表和applicant 表都与person 表具有一对一的关系(主键保存在person 表中),但彼此不相关。
我有以下域对象
public class Person
{
public virtual Guid PID{get;set;}
}
public class Applicant: Person
{
public virtual string AID {get;set;}
}
public class Student:Person
{
public virtual int SID {get;set;}
}
它们每个都有一个从 ClassMap 或 SubClassMap 派生的地图类
public class PersonMap: ClassMap<Person>
{
public PersonMap()
{
Id(x => x.PID).GeneratedBy.Assigned();
Table("Person");
}
}
public class ApplicantMap: SubclassMap<Applicant>
{
public ApplicantMap()
{
Table("Applicant");
KeyColumn("PID");
Map(x => x.AID);
}
}
public class StudentMap:SubclassMap<Student>
{
public StudentMap()
{
Table("Student");
KeyColumn("PID");
Map(x => x.SID);
}
}
我的问题是,是否有可能同时拥有一个申请人和学生。在数据库方面,我可以在每个表中拥有一个包含相同 PID 的行,nhibernate 将允许我保存和检索所有三个对象?
我遇到的一个问题是,当申请人和当然人员的 id 已经存在时,我试图将其插入到 student 中。
public void MakePersonAStudent(Person p)
{
Student newStudent = new Student();
newStudent.PID = p.PID;
newStudent.SID = getNewStudentID();
Session.Save(newPerson);
}
产生的异常是:
具有相同标识符值的不同对象已与会话关联.... 73e5fd90-c27a-49d8-87dc-cd6413c120a2,实体:Student
【问题讨论】: