如何在NHibernate中使用无状态会话添加多对多关系?
我使用NHibernate将两个实体映射到DB:如何在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
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好吗?