如何在NHibernate中使用无状态会话添加多对多关系?

如何在NHibernate中使用无状态会话添加多对多关系?,nhibernate,many-to-many,stateless,Nhibernate,Many To Many,Stateless,我使用NHibernate将两个实体映射到DB: class Entity1 { public int Id { get; set; } public Entity2[] ReferencedEntities { get; set; } } class Entity2 { public int Id { get; set; } } 对于Entity1,我还指定了与Entity2的多对多关系: HasManyToMany(x => x.ReferencedEnti

我使用NHibernate将两个实体映射到DB:

class Entity1
{
    public int Id { get; set; }
    public Entity2[] ReferencedEntities { get; set; }
}

class Entity2
{
    public int Id { get; set; }
}
对于Entity1,我还指定了与Entity2的多对多关系:

HasManyToMany(x => x.ReferencedEntities);
据我所知,NHibernate内部代表多对多关系,创建了一些关系实体,如:

class Reference
{
    public Entity1 Entity1 { get; set; }
    public Entity2 Entity2 { get; set; }
}
我使用NHibernate无状态会话将这些实体添加到DB中,如下所示:

using (var session = sessionFactory.OpenStatelessSession())
{
    session.Insert(entity1);
    foreach (var entity2 in entity1.ReferencedEntities)
    {
        session.Insert(entity2);
    }
}

但我还想增加它们之间的关系。为此,我还需要保存关系实体。如何使用无状态会话添加多对多关系?我需要隐式地指定关系实体还是有其他方法?

无状态会话不级联操作,因此如果在其他表中执行ArrayElement,它不会保存对ArrayElement的更改和链接


不必要的选择通常是缺少/错误代码的标志,例如
UnsavedValue()
Equals()`GetHashCode()

为什么不使用ISession?数据库中将有一个实际的链接表,您的无状态会话代码不会创建那些必要的链接表行。会话与数据架构没有任何共同之处—它是使用它的唯一方法。无状态会话提供了更好的性能,因为有状态会话进行了一些不必要的选择。与数据模式没有共同之处吗?不知道那是什么意思。我想如果您真的只需要使用无状态会话,那么您必须自己映射多对多链接表并插入这些行。你真的在和NH作对…还是使用ADO.net好吗?