2008-11-25 80 views
8

我想映射使用Fluent NHibernate的聯合子類場景。 我在命名空間中的核心定義的實體類和類 子類:實體命名空間中的SomeModule流利的NHibernate,加入 - 子類映射

現在我顯然不希望實體類,以瞭解其派生 類型中,SomeModules命名空間引用的核心 - 沒有其他方式 左右。

所有的例子我已經能夠找到使用類似:

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做到這一點?

回答

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); 
    }); 
} 
} 

希望它可以幫助

+1

您提出的解決方案不能解決我的問題,即分離實體和子類的映射。 – 2008-11-27 22:02:33

0

馬格努斯,我有完全相同的類型的問題,和你的建議排序它。

JoinedSubClass的第二個參數需要針對SubT類型的對象的SubClassPart Action。因此,您只需要在子類對象上映射附加字段。

前面的例子是映射一個Id,所以我猜這是一個不同的ID基值和子類加入的值,否則你會開始看到SqlParameterCollection錯誤通過。

1

抱歉錯過了你的評論,發現這個

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

希望它可以幫助如果你還沒有解決它了。

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 
+4

似乎添加零件現在已過時...? – 5x1llz 2009-06-01 13:36:56

10

我認爲API已經改變,因爲這個問題被問,但是這工作對我來說:

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

我相信KeyColumn如果它比「Baseclassname_id」

不同時才需要

注意:SomeSubClass擴展的基類也應該有ClassMap<SomeBaseClass>

+0

+1您的不錯的答案。你有什麼想法如何告訴流利的NHibernate的「KeyColumn」應該加入到基類表中的列「XYZ」,而不是主鍵列? – 2011-05-20 16:46:23