8

Fluent NHibernate を使用して、結合されたサブクラスのシナリオをマップしようとしています。名前空間 Core で定義されたクラス Entity と、名前空間 SomeModule でクラス SubClass : Entity があります。

ここで、クラス Entity にその派生型を認識させたくないのは明らかです。SomeModules 名前空間は Core を参照します。その逆ではありません。

私が見つけたすべての例は、次のようなものを使用しています。

public class EntityMap : ClassMap<Entity> {
    public EntityMap() {
        Id(x => x.Id)

        var subClassMap = JoinedSubClass<SubClass>("SubClassId", sub => sub.Map(x => x.Id));

        subClassMap.Map(x => x.SomeProperty)
        ...
    }
}

これは私の状況ではうまくいきません - NHibernate xml マッピングに似たものが必要です:

<joined-subclass name="SubClass" extends="Entity, Core" >
<key column="SubClassId" foreign-key="FK_KollegiumEntity"/>
<property name="Name" length="255" not-null="true" />
...
</joined-subclass>

Fluent NHibernateでこれを達成した人はいますか?

4

5 に答える 5

10

この質問がされてからAPIが変更されたと思いますが、これは私にとってはうまくいきます:

public class SomeSubclassMap : SubclassMap<SomeSubclass> {
    public SomeSubclassMap()
    {
        KeyColumn("SomeKeyColumnID");
        Map(x => x.SomeSubClassProperty);
        ...
    }
}

KeyColumn は、「Baseclassname_id」とは異なる場合にのみ必要だと思います

注: ClassMap<SomeBaseClass>SomeSubClass が拡張する基本クラスの も必要です。

于 2010-05-06T15:52:45.117 に答える
1

マグナス(またはプライズ)、

親マッピング クラスで最後の例を使用する方法を理解しましたか? これは私にとってはうまくいきましたが、SubClassMap を自分でインスタンス化するのは好きではありません:

public class EntityMap : ClassMap<Entity> {
 public EntityMap() {
    Id(x => x.Id)
    AddPart(new SubClassMap()); // Adds the subclass mapping!
 }
}

public class SubClassMap : JoinedSubClassPart<SubClass>
{
    public SubClassMap()
        : base("SubClassId")
    {
         Map(x => x.Name); 
         Map(x => x.SomeProperty); 
    }
}

次のようなクエリが生成されました。

SELECT
  this_.Id as Id2_2
  this_.Name as Name3_2
  this_.SomeProperty as SomeProperty3_2
FROM
  SubClass this_ inner join
    Entity this_1 on this_.Id=this_1.Id
于 2009-01-06T18:19:27.570 に答える
1

コメントを見逃してすみません、これを見つけました

public class SubClassMap : JoinedSubClassPart< SubClass >
{
    public SubClassMap()
        : base("SubClassId")
    {
         Map(x => x.Name); 
         Map(x => x.SomeProperty); 
    }
}

まだ解決していない場合は、お役に立てば幸いです。

于 2008-12-17T09:18:55.223 に答える
0

マグナス、私はまったく同じタイプの問題を抱えていましたが、あなたの提案で解決しました。

JoinedSubClass の 2 番目のパラメーターは、タイプ SubT のオブジェクトに対して SubClassPart アクションを実行します。したがって、サブクラス化されたオブジェクトに追加のフィールドをマップするだけで済みます。

前の例は Id をマッピングしているので、ベースとサブクラスが結合する値とは異なる ID であると推測しています。そうしないと、SqlParameterCollection エラーが発生し始めます。

于 2008-12-05T15:12:52.517 に答える
0

こんにちは、数日前にそのようなことをしました。

public class EntityMap : ClassMap<Entity> {
 public EntityMap() {
    Id(x => x.Id)

    JoinedSubClass<SubClass>("SubClassId", sub => { 
          sub.Map(x => x.Name); 
          sub.Map(x => x.SomeProperty); 
    });
 }
}

それが役に立てば幸い

于 2008-11-27T15:29:56.837 に答える