无论如何,我是否可以测试一个集合是否是会话中的多对多或多对一关系。
我已经使用
SessionFactory.GetClassMetadata(类型)
它提供了 PropertyTypes 集合,但这并没有区分多对多和多对一,其中一对多是满足的
无论如何,我是否可以测试一个集合是否是会话中的多对多或多对一关系。
我已经使用
SessionFactory.GetClassMetadata(类型)
它提供了 PropertyTypes 集合,但这并没有区分多对多和多对一,其中一对多是满足的
下面的代码将迭代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