删除时显示相关实体

本文关键字:实体 显示 删除 | 更新日期: 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实体,则有BD关系,而没有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;
  }
}