在NHibernate中对两个不同的存储库使用相同的模型
本文关键字:存储 模型 两个 NHibernate | 更新日期: 2023-09-27 18:03:55
我有一个像这样的模型类,
Class Student
{
private virtual int StudentId; --> id column
private virtual int StudentName;
}
我有两个存储库说LabRepository &LibraryRepository两者都有一个Student表
问题:当我尝试从LabRepository检索学生对象并使用相同的模型插入到LibraryRepository时,它失败了,因为从LabRepository中检索到的StudentId值为1,而NHibernate将执行更新查询而不是插入查询,当它看到Id列为1时。Update查询失败,因为Library
中没有ID为1的Student记录我在这里给出了一个示例,但我的实际模型类甚至更复杂,其中包含许多id列。是否有任何方法可以让我从一个存储库中获取模型对象,并将其插入到其他存储库中,而无需担心id列?
可以使用显式声明的EntityName(而不是类名)两次映射Student
将idgeneration更改为assigned并映射引用
public LibraryStudentMap()
{
EntityName("LibraryStudent");
Table("LibraryStudents");
Id(x => x.StudentId).GeneratedBy.Assigned();
}
public LabStudentMap()
{
EntityName("LabStudent");
Table("LabStudents");
Id(x => x.StudentId).GeneratedBy.Assigned();
}
public LibraryMap()
{
References(x => x.Student).EntityName("LibraryStudent");
}
public LabMap()
{
References(x => x.Student).EntityName("LabStudent");
}
那么应该可以
lab.Student = library.Student;
session.SaveOrUpdate(lab);