如何查询NHibernate类映射以找出哪些实体可以引用另一个实体?

时间:2012-03-26 07:12:58

标签: 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.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映射代码:)

1 个答案:

答案 0 :(得分:1)

使用配置的AFAIK是这里的方式。

var propertiesWithX = config.ClassMappings
    .SelectMany(clazz => clazz.PropertyClosureIterator)
    .Where(prop => prop.PropertyType == typeof(X) || IsCollectionOfTypeX(prop));