在FluentNHibernate中使用SubClass时,如何在子类表中指定PK的名称?

时间:2010-08-20 15:45:45

标签: fluent-nhibernate nhibernate-mapping joined-subclass

我正在Fluent NHibernate中尝试子类映射。

在父类映射中,我必须指定ID列名以防止FNH猜错:

Id(x => x.Id).Column("UserId");

我还需要在子类映射中指定ID(或外键,如果你喜欢)字段名,因为FNH也猜错了。我该怎么做?

1 个答案:

答案 0 :(得分:0)

我还没有找到直接修改映射文件本身的方法,但是我发现重写Fluent NHibernate的外键约定就行了:

public class FKConvention : ForeignKeyConvention
{
  protected override string GetKeyName(FluentNHibernate.Member property, Type type)
  {
    if (property == null)
    {
      // Relationship is many-to-many, one-to-many or join.
      if (type == null)
        throw new ArgumentNullException("type");
      return type.Name + "Id";
    }
    // Relationship is many-to-one.
    return property.Name + "Id";
  }
}

必须按照本页底部的说明注册新约定:http://wiki.fluentnhibernate.org/Conventions