口若悬河的Nhibernate和composedID外键

口若悬河的Nhibernate和composedID外键,nhibernate,Nhibernate,我有两个类,我正试图在饶舌的Nhibernate中映射它们 映射如下所示 public class FooMap : ClassMapping<Foo> { Table("FooTableName"); ComposedId(compIDMapper => { compIDMapper.Property(x => x.SomeInt, m => m.Column("SomeInt")); compI

我有两个类,我正试图在饶舌的Nhibernate中映射它们

映射如下所示

  public class FooMap : ClassMapping<Foo>
  {
    Table("FooTableName");
    ComposedId(compIDMapper =>
      {
        compIDMapper.Property(x => x.SomeInt, m => m.Column("SomeInt"));
        compIDMapper.ManyToOne(x => x.SomeReference, m => m.Column("SomeReference"));
      });
  }

  public class BarMap : ClassMapping<Bar>
  {
    Table("BarTableName");
    Id(x => x.ID, m => m.Column("barID"));

    ManyToOne(x => x.Foo, m => m.Columns( columnMapper =>
                                                             {
                                                               columnMapper.Name("SomeIntID"); //Both of these columns are in the BarTableName like they should be
                                                               columnMapper.Name("SomeReferenceID");
                                                             }));
  }

我不确定我做错了什么,看起来应该行得通,但我已经在这个问题上绞尽脑汁有一段时间了,还没有取得任何进展。有没有关于我做错了什么的想法?

终于找到了答案,把它贴在其他人的面前

我的问题是误解了列映射器。应该是这样的:

ManyToOne(x => x.Foo, m => m.Columns(new Action<IColumnMapper>[]
                                                                {
                                                                  colMapper => colMapper.Name("SomeIntID"),
                                                                  colMapper => colMapper.Name("SomeReferenceID")
                                                                }));
manytone(x=>x.Foo,m=>m.Columns(新操作[])
{
colMapper=>colMapper.Name(“SomeIntID”),
colMapper=>colMapper.Name(“SomeReferenceID”)
}));

这就解决了问题。当我看到函数签名时,应该已经注意到了,但我完全没有注意到。

还有另一种更短的方法

ManyToOne(x => x.Foo, m => m.Columns(c=> c.Name("SomeIntID"),c => c.Name("SomeReferenceID")));
ManyToOne(x => x.Foo, m => m.Columns(c=> c.Name("SomeIntID"),c => c.Name("SomeReferenceID")));