流利的nHibernate,反向一个属性

时间:2011-04-18 20:08:33

标签: fluent-nhibernate

我认为这很简单,但事实证明它比我预期的更令人沮丧。

给出类似于此的结构......

class Template {
  public virtual int Id { get; set; }
  public virtual Attached Attached { get; set; }
}

class Attached {
 public virtual int Id { get; set; }
 public virtual Template Template { get; set; }
}

我希望表结构看起来像这样。

表格 - 模板

编号

表格 - 附上

Id - TemplateId

所以我设置了我的映射......

class TemplateMap : ClassMap<Template> {
  TemplateMap(){
    HasOne(x => x.Attached).Cascade.All();
  Table("Templates");
  }
}
class AttachedMap : ClassMap<Attached> {
  AttachedMap(){
    References(x => x.Template).Cascade.All().Column("TemplateId");
    Table("Attached");
  }
}

然后我创建一个新模板

var tmpl = new Template {
  Attached = new Attached {
    // ... 
  }
};

session.SaveOrUpdate(tmpl);
transaction.Commit();

但是TemplateId表中的Attached仍然是空的。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

我认为这里关系的双方需要一对一。此外,您还需要在关系的一侧指定id是外部生成的。

如果您需要更多细节,请阅读以下2篇文章:
link1
link2

修改
这里有一个关于我正在谈论的内容以及他们在link1中谈到的内容的例子:
Fluent Example