如何使用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 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>
{}