好的,我是NHibernate的新手,所以也许这里有人可以解释一下。我有3个表/实体:
听起来,ApplicationRoles是一个查找表,它具有应用程序和角色的外键,以及一些其他字段,如IsActive。
现在,在代码中,ApplicationRole引用了父项,应用程序和角色。 Application对象有一个List,因此它可以引用子ApplicationRole对象。角色没有,但我尝试添加它,它似乎没有什么区别。
我遇到的问题是我似乎无法直接加载ApplicationRole对象,操纵它并再次保存它。我可以通过它自己的PK或两个FK加载对象,我可以更改它的IsActive字段,但是当我将它保存回数据库时,我得到一个错误,关于Application对象上的'未使用flush处理的集合'这是其他儿童系列。
我认为这可能是由于延迟加载,因为如果我使用调试器并检查对象的Application父引用就不会发生,保存很顺利。但如果我不这样做,我就会收到上述错误。
如果我加载Application对象并操纵它的子ApplicationRole对象,并保存应用程序本身,它可以工作,但我觉得我不应该这样做。
编辑:澄清了数据关系
答案 0 :(得分:1)
你可以完全抛弃ApplicationRole类
Application
{
public IList<Role> Roles { get; private set; }
}
// in ApplicationMap
HasManyToMany(a => a.Roles)
.Table("ApplicationRole")
.ParentKeyColumn("application_id")
.ChildKeyColumn("role_id")
.Cascade.AllDeleteorphan();