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 はデータベースによって生成され、最終的に 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));
     }
}

上記と同じ方法でIHasManyConventionandも実装する必要があります。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 に答える