2

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

我已经使用

SessionFactory.GetClassMetadata(类型)

它提供了 PropertyTypes 集合,但这并没有区分多对多和多对一,其中一对多是满足的

4

1 回答 1

1

下面的代码将迭代TheEntity属性名称,以查找映射的集合。然后,它会询问 Collection persister 并获取有关一对多或多对多的信息

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

于 2013-09-15T16:24:19.560 回答