如何实现具有多对多关联的实体,以便能够使用NHibernate保存根对象?
我有两个实体:如何实现具有多对多关联的实体,以便能够使用NHibernate保存根对象?,nhibernate,nhibernate-mapping,many-to-many,Nhibernate,Nhibernate Mapping,Many To Many,我有两个实体: public class Group { public virtual int Id { get; set; } public virtual string Name { get; set; } private ICollection<Item> _items = new HashSet<Item>(); public virtual ICollection<Item&
public class Group
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
private ICollection<Item> _items = new HashSet<Item>();
public virtual ICollection<Item> Items
{
get { return _items; }
set { _items = value; }
}
}
public class Item
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
公共类组
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
私有ICollection_items=new HashSet();
公共虚拟ICollection项目
{
获取{return\u items;}
设置{u items=value;}
}
}
公共类项目
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
}
我使用具有以下覆盖的自动映射:
automapping.Override<Group>(m => m.HasManyToMany(_ => _.Items).AsSet());
automapping.Override(m=>m.hasmanytomy(=>.Items).AsSet());
我构造了一个组对象,并将它们添加到组对象中。使用session.save(group)
保存组对象时,会发生异常:
NHibernate.TransientObject异常:对象引用未保存的临时实例-在刷新之前保存临时实例。类型:NhResearch.ManyToManyTests+项,实体:0项1
位于NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsave(字符串entityName、对象实体、ISessionImplementor会话)
我这里缺少什么?您缺少级联设置
m => m.HasManyToMany(_ => _.Items).AsSet().Cascade.AllDeleteOrphan()
全部-如果要保存更新和删除项目
AllDeleteOrphan-与all相同,但也删除孤立项
SaveUpdate-保存或更新时级联
删除-仅级联已删除的项目
仅供参考,您可能还缺少表规范以及父键列和子键列。SaveUpdate完成了这项工作。谢谢