如何查询NHibernate类映射以找出哪些实体可以引用另一个实体?
最好举个例子。假设我有这些映射:如何查询NHibernate类映射以找出哪些实体可以引用另一个实体?,nhibernate,Nhibernate,最好举个例子。假设我有这些映射: 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.
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);
}
}
}
显然,我没有考虑过很多东西,比如子类映射、三元关系、组件映射等,但我要寻找的是一个列表,其中列出了一个实体在数据库中存储时可能引用另一个实体的所有位置
我试着查看Configuration.ClassMappings类,但是NHibernate.Mapping.RootClass是一个非常庞大的类,我很快就迷路了。有没有人对如何做到这一点有任何建议(最好不必非常熟悉NHibernate映射代码:)AFAIK使用配置就是一种方法
var propertiesWithX = config.ClassMappings
.SelectMany(clazz => clazz.PropertyClosureIterator)
.Where(prop => prop.PropertyType == typeof(X) || IsCollectionOfTypeX(prop));
var propertiesWithX = config.ClassMappings
.SelectMany(clazz => clazz.PropertyClosureIterator)
.Where(prop => prop.PropertyType == typeof(X) || IsCollectionOfTypeX(prop));