如何使用FluentNHibernate配置通用组件?

如何使用FluentNHibernate配置通用组件?,nhibernate,fluent-nhibernate,nhibernate-mapping,components,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Components,下面是我要为其配置映射的组件 public class Range<T> : ValueObject { public virtual T Start {get; set;} public virtual T Finish {get; set;} } 公共类范围:ValueObject { 公共虚拟T开始{get;set;} 公共虚拟T完成{get;set;} } 在我的领域中,我有许多实体,它们具有诸如Range、Range等属性。。。对于属性为x的特定类,我们

下面是我要为其配置映射的组件

public class Range<T> : ValueObject
{
    public virtual T Start {get; set;}
    public virtual T Finish {get; set;}
}
公共类范围:ValueObject
{
公共虚拟T开始{get;set;}
公共虚拟T完成{get;set;}
}
在我的领域中,我有许多实体,它们具有诸如Range、Range等属性。。。对于属性为x的特定类,我们通过以下方式配置组件:

 persistenceModel.FindMapping<Customer>()  
     .Component<Address>            (  
                 x => x.CustomerAddress,  
                 m =>  
                 {  
                     m.Map(x => x.Street).WithLengthOf(100);  
                     m.Map(x => x.PostalCode).WithLengthOf(6);  
                     m.Map(x => x.Town).WithLengthOf(30);  
                     m.Map(x => x.Country).WithLengthOf(50);  
                 }); 
persistenceModel.FindMapping()
.组成部分(
x=>x.CustomerAddress,
m=>
{  
m、 地图(x=>x.Street),长度为(100);
m、 映射(x=>x.PostalCode)。长度为(6);
m、 地图(x=>x.Town)。长度为(30);
m、 地图(x=>x.Country)。长度为(50);
}); 
整个域的约定看起来如何?
我错过了什么吗。使用FluentNhibernate不可能?

您不应该为此目的使用
FindMapping
。能够通过该方法更改映射是一种疏忽,绝对不应该依赖它。该方法用于检查持久性模型,而不是修改它。如果您使用的是自动映射,您应该查看


我相信您的问题可以通过
ICompositeUserType
实现来解决;关于如何实现这些功能,在线提供了一些资源,特别是一个。您只需将范围属性映射为普通属性,但使用
CustomType
为其提供用户类型

Map(x => x.Range)
  .CustomType<RangeUserType>();
诚然,这并不理想

public abstract class RangeMap<T> : ComponentMap<T>
{
  protected RangeMap()
  {
    Map(x => x.Start);
    Map(x => x.Finish):
  }
}

public class IntRangeMap : RangeMap<int>
{}

public class DateRangeMap : RangeMap<DateTime>
{}