最好问一个例子。假设我有这些映射:
public class A
{
internal int Id { get; private set; }
public X X { get; set; }
internal class Map : ClassMap<A>
{
public Map()
{
Id(x => x.Id);
References(x => x.X);
}
}
}
public class B
{
internal int Id { get; private set; }
private IList<X> XList;
internal class Map : ClassMap<B>
{
public Map()
{
Id(x => x.Id);
HasMany(x => x.XList)
.Access.Field();
}
}
}
public class X
{
protected internal virtual int Id { get; private set; }
internal class Map : ClassMap<X>
{
public Map()
{
Id(x => x.Id);
}
}
}
我正在寻找能够接受NHibernate(或FluentNHibernate)配置(或FluentConfiguration)对象并输出如下内容的代码:
A - property member X
B - field member XList
显然有很多我没有考虑过子类映射,三元关系,组件映射等,但我正在寻找的是一个列表,其中一个实体存储在数据库中时可能引用另一个实体实体。
我试图查看Configuration.ClassMappings类,但NHibernate.Mapping.RootClass是一个怪物,我很快就迷路了。有没有人对如何做到这一点有任何指示(最好不必熟悉NHibernate映射代码:)
答案 0 :(得分:1)
使用配置的AFAIK是这里的方式。
var propertiesWithX = config.ClassMappings
.SelectMany(clazz => clazz.PropertyClosureIterator)
.Where(prop => prop.PropertyType == typeof(X) || IsCollectionOfTypeX(prop));