在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列?

在NHibernate中对两个不同的存储库使用相同的模型

可以使用显式声明的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);