如何使用IHasManyConvention Fluent NHibernate约定在HasMany映射上设置PropertyRef?

时间:2010-02-26 20:08:04

标签: c# nhibernate fluent-nhibernate

目前我正在使用Fluent NHibernate生成我的数据库模式,但我希望HasMany关系中的实体指向不同的列以供参考。 IE,这就是NHibernate在创建DDL时会生成的内容:

alter table `Pony` add index (Stable_ID),
add constraint Ponies_Stable foreign key (Stable_Id)
references `Stable` (Id);

这就是我想要的:

alter table `Pony` add index (Stable_ID),
add constraint Ponies_Stable foreign key (Stable_Id)
references `Stable` (EntityId);

其中Stable.ID是主键,Stable.EntityId只是我设置的另一列。

我的课程已经如下:

public class ForeignKeyReferenceConvention : IHasManyConvention
{
    public void Apply(IOneToManyCollectionInstance instance)
    {
        instance.Cascade.All();
        //What goes here so that I can change the reference column?
    }
}

如何更改参考列?

作为一个例子,这里是IReferenceConvention的代码看起来像做同样的事情:

    public class MyReferenceConvention : IReferenceConvention
    {
        public void Apply(IManyToOneInstance instance)
        {
            instance.PropertyRef("EntityId");
            instance.Cascade.All();
        }
    }

编辑: instance.Key.Column("EntityId")不是解决方案。

1 个答案:

答案 0 :(得分:7)

  

注意:这仅适用于Fluent NHibernate downloads

中#632之后的版本中

IOneToManyInstance上有一个名为Key的属性,可让您修改关系中使用的密钥;在该属性上,有一个PropertyRef方法,应该是您正在寻找的方法。

public class ForeignKeyReferenceConvention : IHasManyConvention
{
  public void Apply(IOneToManyCollectionInstance instance)
  {
    instance.Key.PropertyRef("EntityId");
  }
}