2010-11-18 51 views
5

我目前正在使用這樣的組件的地圖:Fluent Nhibernate - 映射組件集合(值對象)?

public class UserMapping 
{ 
     public UserMapping() 
     { 
      Id(c => c.Id).GeneratedBy.HiLo("100"); 
      Map(c => c.UserName); 
      Component(c => c.Country, CountryComponentMapping.Map); 
     } 
} 


public sealed class CountryComponentMapping 
{ 
    public static void Map(ComponentPart<Country> part) 
    { 
     part.Map(x => x.CountryName) 
     part.Map(x => x.CountryAlpha2) 
    } 
} 

我喜歡這個監守我只需要定義在一個地方的組件/對象值的映射。

我該如何去使用相同的語義來收集組件?(例如,假設我們想將其更改爲用戶實體上的一組國家/地區)

+0

組件是父實體的一部分,想在流利的文檔其中Address是客戶的一個組成部分的基本的例子,但表它的生命作爲Customer_City,Customer_ZIP等 – 2011-02-25 15:40:03

回答

7

您可以將此映射爲Component Collection。不幸的是Hasmany()。Fluent NHibernate中的Component()沒有重載,允許你指定你想使用派生類的ComponentMap。不過,您可以使用上述技巧的修改。

public sealed class UserMap : ClassMap<User> { 
    public UserMap() { 
     Id(c => c.Id).GeneratedBy.HiLo("100"); 
     Map(x => x.Name); 
     HasMany(x => x.Countries).Component(CountryComponentMapping.Map); 
    } 
} 

public sealed class CountryComponentMapping { 
    public static void Map(CompositeElementBuilder<Country> part) { 
     part.Map(x => x.CountryName); 
     part.Map(x => x.CountryAlpha2) 
    } 
} 
+0

這個答案現在已經超過5歲。在此期間有什麼變化嗎? – MarioDS 2016-08-26 11:37:37

相關問題