Nhibernate 将实体列表绑定到组件中
使用FluentNHibernate,我映射了一个引用GeneralReference、GeneralReferenceOption和Profile实体的UserPreference实体: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
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扩展方法中消失了,这使得整个过程有点混乱