删除时显示相关实体
本文关键字:实体 显示 删除 | 更新日期: 2023-09-27 18:13:25
我有一个与NHibernate映射的一些关系的模型,它工作得很好,例如:
public class A
{
public int Id { get; set; }
// other properties
public ICollection<B> BList { get; set; }
public ICollection<C> CList { get; set; }
public ICollection<D> DList { get; set; }
}
这种类型的实体的持久化和读取工作得很好,但是当用户要删除一个A
实体时,我想告诉他,有一个或多个实体相关(不是什么实体(id,名称等),而是什么类型的实体),例如:
You cannot delete this register because there are relations with:
-B
-D
(如果是A
实体,则有B
或D
关系,而没有C
关系)。
我知道我可以逐个实体检查这个信息,但我想有一个通用的解决方案,有什么办法吗?
NHibernate有它自己的元数据API,它允许你读取所有的映射信息,包括哪些集合被映射到属性,以及属性类型是什么。从每个属性的类型中,您可以找到相关类型的名称。
A instance = ...
var metaData = this.session.SessionFactory.GetClassMetadata(instance.GetType());
foreach(IType propertyType in metaData.PropertyTypes)
{
if(propertyType.IsCollectionType)
{
var name = propertyType.Name;
var collectionType = (NHibernate.Type.CollectionType)propertyType;
var collection = collectionType.GetElementsCollection(instance);
bool hasAny = collection.Count > 0;
}
}