Nhibernate 将实体列表绑定到组件中

Nhibernate 将实体列表绑定到组件中,nhibernate,list,fluent-nhibernate,Nhibernate,List,Fluent Nhibernate,使用FluentNHibernate,我映射了一个引用GeneralReference、GeneralReferenceOption和Profile实体的UserPreference实体: public class UserPreference { public virtual long Id { get; set; } public virtual Profile Profile { get; set; } public virtual GeneralPreferenc

使用FluentNHibernate,我映射了一个引用GeneralReference、GeneralReferenceOption和Profile实体的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
  }
}

这种感觉就像一个组件,但组件不是为这种类型的场景创建的。有人对我如何映射这一点有什么建议吗?

我找到了一种方法,在我的配置文件实体上映射一个私有属性。使用Fluent NHibernate wiki中的技术映射私有属性http://wiki.fluentnhibernate.org/Fluent_mapping_private_properties 我将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功能和

我的助手方法在所有其他IEnumerable扩展方法中消失了,这使得整个过程有点混乱