2010-11-18 4 views
5

Şu anda böyle bileşen haritalar kullanıyorum: Ben sadece tek bir yerde bileşen/değer nesnesi için eşleme tanımlamak zorunda çünküFluent Nhibernate - bileşenlerden oluşan bir koleksiyonun eşlenmesi (değer nesneleri)?

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

Bunu beğendim.

Bileşenin bir koleksiyonu için aynı semantiği kullanmaktan nasıl yararlanabilirim? (ör. Bunu, kullanıcı varlıkları üzerindeki bir ülke koleksiyonuna değiştirmek istediğimizi varsayalım)

+0

Bileşenleri, üst varlığının bir parçası olan Adres Müşteri bir bileşenidir Akıcı docs temel örneği düşünüyorum, ama masa o Customer_City, Customer_ZIP vb –

cevap

7

Bunu bir Bileşen Koleksiyonu olarak eşleyebilirsiniz. Ne yazık ki, ComponentMap'in türetilmiş bir sınıfını kullanmak istediğinizi belirtmenize olanak tanıyan Akıcı NHibernate'de HasMany() için aşırı yükleme yoktur. Yine de tekniğinizin bir modifikasyonunu kullanabilirsiniz.

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

Bu cevap şimdi de 5 yıldan daha eski olduğu yaşıyor . Bu arada bir şey değişti mi? – MarioDS