2011-06-07 72 views
0

我有2類:如何做到基業流暢NH沒有鑑別類型列

public class MyBaseClass 
{ 
    public virtual int Id { get; set; } 
    public virtual string BaseProperty { get; set; } 
} 

public class MyClass : MyBaseClass 
{ 
    public virtual string ChildProperty { get; set; } 
} 

我想他們每個人映射到他自己的表(流利NH)。如何在[MyBaseClass]表中不添加任何鑑別器類型的列?所以我期望[MyBaseClass]表只包含BaseProperty和Id列,MyClass包含Id,BaseProperty和ChildProperty列。

感謝

回答

0

你可以嘗試把IgnoreBaseMyBaseClass。它會說的FNH這些類獨立

+0

它會工作,如果我真的不需要MyBaseClass被映射。但事情是我其實是這樣做的。它被映射到MyBaseClass表,並在我的應用程序中用作常規域數據類。 – YMC 2011-06-08 16:01:05

0

我剛剛發現這個(http://wiki.fluentnhibernate.org/Fluent_mapping#Components)地圖:

public class Parent 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Child : Parent 
{ 
    public string AnotherProperty { get; set; } 
} 

如果你想映射這是一個 表每個子類中,你」 d做到像 這樣:

public class ParentMap : ClassMap<Parent> 
{ 
    public ParentMap() 
    { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    } 
} 

public class ChildMap : SubclassMap<Child> 
{ 
    public ChildMap() 
    { 
    Map(x => x.AnotherProperty); 
    } 
} 

所以看起來這種方法不需要任何改變Db的像添加特殊FIEL ds到我的表格。唯一的問題是我不知道如何使用Override語句在AutoMapping中執行相同的操作。我們這樣做:

public class AutoMappingConfiguration : DefaultAutomappingConfiguration 
{ 
    public override bool IsDiscriminated(Type type) 
    { 
     return true; 
    } 

    public override bool ShouldMap(Type type) 
    { 
     return type.In(typeof(MyBaseClass),typeof(MyClass),...) 
    } 
... 
} 

FluentNHibernate.Automapping.AutoPersistenceModel Instance = 
      AutoMap.AssemblyOf<MyBaseClass>(new AutoMappingConfiguration())    
    .Override<MyBaseClass>(m => 
{ 
     ... 
    } 
} 

所以我不知道如何應用SubClass指令在我的情況。有任何建議嗎?

謝謝。

+0

我已經這樣做了,但看起來它需要爲MyClass表創建MyBaseClass_id列,這不適合我的需要,我無法更改Db架構 – YMC 2011-06-08 18:24:50