This is a problem of unidirectional one-to-one mapping in NHibernate.
Student.cs
public class Student
{
public int ID { get; set; }
public int Roll { get; set; }
public int RegNo { get; set; }
public string Name { get; set; }
public StudentDetail StudentDetail { get; set; }
}
StudentDetail.cs
public class StudentDetail
{
public int ID { get; set; }
public string Father { get; set; }
public string Mother { get; set; }
}
How can I map these classes (how do the hbm mapping files look like) to the following case of one-to-one relationship?
Please have a look at the classes and the table very carefully.
Where can I put the <many-to-one>
tag in Student.hbm.xml
or StudentDetail.hbm.xml
? If I put it in Student.hbm.xml
, how can I map the column StudentDetail.StudentID
, coz it is in a different table?
So this mapping:
<class name="Student" table="Student">
<id name="ID" column="ID">
<generator class="native"/>
</id>
.......
<many-to-one class="StudentDetail" name="StudentDetail" column="StudentID" unique="true" cascade="all" />
</class>
generates the following exception:
{"Invalid column name 'StudentID'."}
On the other hand <many-to-one>
can't be placed in StudentDetail.hbm.xml
. Coz, StudentDetail.cs
doesn't contain any property of type Student
.
Can I use <one-to-one>
-tag? If yes where should I place it, in Student.cs
or StudentDetail.cs
? And how should I configure it?