12

我认为这应该很简单,但我不知道该怎么做。假设我有以下地图:

public class AnimalMap : ClassMap<Animal> { Id( x => x.Id); }

public class CatMap: SubclassMap<Cat> {
    Extends<AnimalMap>();
    Map(x => x.IsDomestic);
}

正如我所料,它创建了表格:

Animal
------
Id

Cat
----
AnimalId : FK to Animal (named FK3500ABA0D)
IsDomestic

如前所述,FK 由 db 生成并最终为 FK3500ABA0D。我想要做的就是设置该约束的名称,但我找不到如何通过 Fluent NHibernate(或者实际上甚至是普通的 NHibernate,就此而言)。

那么,我错过了什么?

4

3 回答 3

22

Fluent NH 确实允许这样做:

public class ReferenceConvention : IReferenceConvention{
     public void Apply(IManyToOneInstance instance) {
          instance.ForeignKey(string.Format("FK_{0}_{1}",
               instance.EntityType.Name,
               instance.Name));
     }
}

您还需要以与上述相同的方式实施IHasManyConvention和。IHasManyToManyConvention

于 2011-04-04T16:35:59.767 回答
1

我不知道 FluentNH 是否支持它,但 XML 很简单:

<joined-subclass name="Cat">
  <key column="AnimalId" foreign-key="NameOfTheFK"/>
</joined-subclass>
于 2010-06-21T18:30:16.933 回答
0

我有同样的问题,以下对我很有效:

public class JoinedSubclassForeignKeyConvention : IJoinedSubclassConvention
{
    public void Apply(IJoinedSubclassInstance instance)
    {
        if (instance.Type.BaseType != null)
            instance.Key.ForeignKey(string.Format("FK_{0}_{1}", instance.EntityType.Name, instance.Type.BaseType.Name));
    }
}

您的外键约束将被命名为 FK_Cat_Animal

于 2013-06-04T11:30:34.323 回答