我有两个实体:
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; }
}
我使用以下覆盖的自动化:
automapping.Override<Group>(m => m.HasManyToMany(_ => _.Items).AsSet());
我构造了一个组对象,并将几个项添加到组对象中。当我使用session.Save(group)
保存组对象时,会发生异常:
NHibernate.TransientObjectException:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。键入:NhResearch.ManyToManyTests + Item,Entity:0 item1 at NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName,Object entity,ISessionImplementor session)
我在这里缺少什么?
答案 0 :(得分:2)
您错过了级联设置。
m => m.HasManyToMany(_ => _.Items).AsSet().Cascade.AllDeleteOrphan()
全部 - 如果您想保存更新和删除项目
AllDeleteOrphan - 与所有相同,但也会删除孤立的项目
SaveUpdate - 保存或更新时级联
删除 - 仅级联已删除的项目
仅供参考,您也可能错过了Table规范以及父键和子键列。