关联多对多对象,而无需从数据库加载它们

本文关键字:数据库 加载 多对象 关联 | 更新日期: 2023-09-27 18:15:41

假设我有这些类,它们之间有多对多的关系:

public class ClassA
{
    public virtual int IdClassA { set; get; }
    public virtual IList<ClassB> BElements { set; get; }
    ...
}
public class ClassB
{
    public virtual int IdClassB { set; get; }
    public virtual IList<ClassA> AElements { set; get; }
    ...
}

是否有可能插入一个ClassB对象,并将其与ClassA对象相关联,而不从数据库中使用NHibernate带来ClassA对象?(也许只是指定一个查询来告诉哪些ClassA对象与新的ClassB对象相关?)

关联多对多对象,而无需从数据库加载它们

当然:

var a1 = session.Load<ClassA>(idA1);
var a2 = session.Load<ClassA>(idA2);
var b = new ClassB { AElements = new List<ClassA> { a1, a2 } };
session.Save(b);
transaction.Commit();

idA1idA2为相关ClassA实例的id。session.Load创建代理而不从数据库加载对象(或者返回一个已经加载的实例,如果有的话)

我看到两个选项。有两个类的两个映射,一个与其他类对象的映射用于插入,另一个仅用于不带对象的选择。或者使用急于加载(lazy true/false),它将从其他类中检索id,但不是整个类。在我看来,它将接近于没有任何东西可以加载(只有id)。这有帮助吗?