测试集合是多对多或多对一

时间:2013-09-15 14:57:30

标签: nhibernate

无论如何我都要测试一个集合是否是会话中的多对多或多对一的关系。

我已经使用了

SessionFactory.GetClassMetadata(类型)

给出了PropertyTypes集合,但是这并没有区分多对多和多对一,其中一对多被照顾

1 个答案:

答案 0 :(得分:1)

下面的代码将迭代TheEntity属性名称,以查找映射的集合。然后,它将要求收集持久性并获得有关一对多或多对多

的信息
var persister = factory
    .GetClassMetadata(typeof(TheEntity)) as AbstractEntityPersister;

// iterate property names
foreach (var propertyName in persister.PropertyNames)
{
    // find type
    var index = persister.GetPropertyIndex(propertyName);
    var propertyType = persister.PropertyTypes[index];

    // check if it is collection
    if (!propertyType.IsCollectionType)
    {
        continue;
    }

    // the Role is
    // the Entity type Name & the Collection name
    var roleName = persister.Name + "." + propertyName;

    // the Abstract collection persister
    var collectionPersister = factory
        .GetCollectionMetadata(roleName) as AbstractCollectionPersister;

    // here we go:
    var isManyToMany = collectionPersister.IsManyToMany;
    var isOneToMany = collectionPersister.IsOneToMany;

}

注意:我想在你的问题中,多对一(参考不是集合映射)应该是One-to-Many