流利的NHibernate无法更改查找记录?

时间:2012-03-02 15:58:41

标签: nhibernate fluent-nhibernate

好的,我是NHibernate的新手,所以也许这里有人可以解释一下。我有3个表/实体:

  • 应用
  • 角色
  • ApplicationRoles

听起来,ApplicationRoles是一个查找表,它具有应用程序和角色的外键,以及一些其他字段,如IsActive。

现在,在代码中,ApplicationRole引用了父项,应用程序和角色。 Application对象有一个List,因此它可以引用子ApplicationRole对象。角色没有,但我尝试添加它,它似乎没有什么区别。

我遇到的问题是我似乎无法直接加载ApplicationRole对象,操纵它并再次保存它。我可以通过它自己的PK或两个FK加载对象,我可以更改它的IsActive字段,但是当我将它保存回数据库时,我得到一个错误,关于Application对象上的'未使用flush处理的集合'这是其他儿童系列。

我认为这可能是由于延迟加载,因为如果我使用调试器并检查对象的Application父引用就不会发生,保存很顺利。但如果我不这样做,我就会收到上述错误。

如果我加载Application对象并操纵它的子ApplicationRole对象,并保存应用程序本身,它可以工作,但我觉得我不应该这样做。

编辑:澄清了数据关系

1 个答案:

答案 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();