gpt4 book ai didi

nhibernate - 这个单向NHibernate一对一映射怎么做?

转载 作者:行者123 更新时间:2023-12-04 00:55:19 26 4
gpt4 key购买 nike

这是NHibernate中单向一对一映射的问题。

学生.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; }
}

如何将这些类(hbm 映射文件看起来如何)映射到以下一对一关系的情况?

alt text

请仔细查看类(class)和表格。

我在哪里可以放 <many-to-one>标签在 Student.hbm.xmlStudentDetail.hbm.xml ?如果我把它放在 Student.hbm.xml ,如何映射列 StudentDetail.StudentID ,因为它在不同的表中?

所以这个映射:
<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>

生成以下异常:
{"Invalid column name 'StudentID'."}

另一方面 <many-to-one>不能放在 StudentDetail.hbm.xml . Coz, StudentDetail.cs不包含任何类型的属性 Student .

我可以用 <one-to-one> -标签?如果是,我应该把它放在哪里,在 Student.csStudentDetail.cs ?我应该如何配置它?

最佳答案

案例#1:

在学生...

<one-to-one name="StudentDetail" 
cascade="save-update,delete"
property-ref="Student" />

在学生详情...
<many-to-one name="Student" 
column="StudentID"
unique="true"
cascade="none" />

请注意,您的 StudentDetail 类中必须有一个属性来引用 Student oobject(称为 Student)。此外,根据您的使用情况,您的级联可能会有所不同。不过,您很可能希望删除级联在那里。
unique="true"确保 StudentDetail 端的一对一映射。

案例#2:

只需交换两个映射,确保将属性名称更改为相反的类。

在这里查看更多信息:
http://nhforge.org/blogs/nhibernate/archive/2009/04/19/nhibernate-mapping-lt-one-to-one-gt.aspx

关于nhibernate - 这个单向NHibernate一对一映射怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2991097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com