无论如何我都要测试一个集合是否是会话中的多对多或多对一的关系。
我已经使用了
SessionFactory.GetClassMetadata(类型)
给出了PropertyTypes集合,但是这并没有区分多对多和多对一,其中一对多被照顾
答案 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