2010-03-08 53 views
1

我沒有對數據庫架構無法控制,並具有以下(簡化)表結構:(流利)NHibernate的條件表映射策略

  • CityProfile
    • 編號
    • 名稱
  • 國家簡介
    • 編號
    • 名稱
  • RegionProfile
    • 編號
    • 名稱

我有一個.net枚舉和類封裝了很多:

public enum Scope { Region, Country, City } 

public class Profile { 
    public Scope Scope { get; set; } 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

我要尋找一種機制,允許我映射到正確的表格,是這樣的:

public class ProfileMap : ClassMap<Profile> { 
    public ProfileMap() { 
     switch (x => x.Scope) { // <--Invalid code here! 
      case Scope.City: Table("CityProfile"); break; 
      case Scope.Country: Table("CountryProfile"); break; 
      case Scope.Region: Table("RegionProfile"); break; 
     } 
     Id(x => x.Id); 
     Map(x => x.Name); 
    } 
} 

還是我走近這個錯了嗎?

回答

2

鑑於數據庫模式是固定的,我將它們映射爲3個獨立的類並映射到公共接口,作爲any引用。

class Foo 
{ 
    public virtual IProfile Profile { get; set; } 
} 

public class FooMap : ClassMap<Foo> 
{ 
    public FooMap() 
    { 
     ReferencesAny(m => m.Profile) 
      .EntityTypeColumn("ProfileType") 
      .EntityIdentifierColumn("ProfileId") 
      .AddMetaValue<CityProfile>("CityProfile") 
      .AddMetaValue<CountryProfile>("CountryProfile") 
      .AddMetaValue<RegionProfile>("RegionProfile") 
      .IdentityType<int>(); 
    } 
} 
+0

謝謝,看起來比我已經着手的繼承戰略更好... – grenade 2010-03-09 10:11:13