2011-02-04 56 views
0

隨着FluentNHibernate我制訂了引用GeneralPreference,GeneralPreferenceOption一個UserPreference實體和檔案實體:捆綁實體列表到一個組件

public class UserPreference 
{ 
    public virtual long Id { get; set; } 
    public virtual Profile Profile { get; set; } 
    public virtual GeneralPreference Preference { get; set; } 
    public virtual GeneralPreferenceOption Value { get; set; } 
} 

這是很容易映射UserPreference的名單上我的檔案實體,但我居然會想要做的是包裝其他類中該列表,以便我可以簡化有關用戶的給定偏好操作:

public class Preferences 
{ 
    public IList<UserPreferences> UserPreferences{get;set;} 

    public Language Language { 
    { 
    //look up the language preference here 
    } 
} 

這有點像一個組件的感覺,但組件沒有對日創建是場景的類型。有沒有人有任何指示我可以如何映射?

回答

0

我想通過映射私人財產在我的個人資料實體做到這一點。使用Fluent NHibernate wiki中關於映射私有屬性的技術(http://wiki.fluentnhibernate.org/Fluent_mapping_private_properties),我在Profile Profile上映射一個UserPreference集合。然後,我創建另一個類PropertyHandler這需要一個IEnumerable作爲構造參數,使之成爲一個公共屬性的實例對配置文件以及:

public class Profile 
{ 
    private PreferenceHandler _preferenceHandler; 

    get { return _preferenceHandler ?? (_preferenceHandler = new PreferenceHandler(UserPreferences)); } 

    private IEnumerable<UserPreference> UserPreferences { get; set; } 

    public static class Expressions 
    { 
    public static readonly Expression<Func<Profile, IEnumerable<UserPreference>>> UserPreferences = x => x.UserPreferences; 
    } 

}

公告嵌套靜態類。它用於啓用私有屬性與FluentNHibernate的映射。

映射類看起來是這樣的:

public class ProfileMappings : ClassMap<Profile> 
{ 
    public ProfileMappings() 
    { 
    //... other mappings 
    HasMany(Profile.Expressions.UserPreferences); 
    } 
} 

我現在可以使用PreferenceHandler類在我的收藏UserPreference創造輔助方法。

另一種方法是爲IEnumberable構建擴展方法。這工作,但我決定不這樣做,因爲

1)我真的不延長IEnumerable的功能和

2)我的輔助方法消失inamongst所有其他的IEnumerable擴展方法使整個事情有點混亂。

相關問題