C# 在nhibernate中,如何确定映射实体是否具有cascade=";都是;?

C# 在nhibernate中,如何确定映射实体是否具有cascade=";都是;?,c#,nhibernate,C#,Nhibernate,我正在创建一个通用的nhibernate方法,在运行时给定一个实例化的nhibernate映射对象,该方法可以确定该对象是否被“数据库”中的其他对象引用 通过这种方式,我将允许用户删除未引用的对象,并在引用时抛出错误(以及有关有多少对象引用了该对象的信息) 但是我遇到了一个障碍,当一个实体被映射为cascade=all时,我希望他们能够删除这个东西,即使其他对象引用它 因此,我只需要知道如何使用Nhibernate.MetaData.IClassMetaData来确定“实体类型”或bag是否为c

我正在创建一个通用的nhibernate方法,在运行时给定一个实例化的nhibernate映射对象,该方法可以确定该对象是否被“数据库”中的其他对象引用

通过这种方式,我将允许用户删除未引用的对象,并在引用时抛出错误(以及有关有多少对象引用了该对象的信息)

但是我遇到了一个障碍,当一个实体被映射为cascade=all时,我希望他们能够删除这个东西,即使其他对象引用它

因此,我只需要知道如何使用Nhibernate.MetaData.IClassMetaData来确定“实体类型”或bag是否为cascade=all。我找了几分钟后似乎找不到它

有什么想法吗

谢谢

艾萨克

注意:这是方法代码(未完成)。IDomainObject只是确保传递的对象具有int ID属性

public int getReferenceCount<T>(T objectToCheck) where T : Interfaces.IDomainObject
    {   
        Type objectType = typeof(T);
        string className = objectType.Name;
        IDictionary<string, NHibernate.Metadata.IClassMetadata> myDictionary = session.SessionFactory.GetAllClassMetadata();
        int referenceCount = 0;
        string fullClassName = objectType.FullName;
        foreach (var thisClassPair in myDictionary)
        {
            NHibernate.Metadata.IClassMetadata thisClass = thisClassPair.Value;
            for (int i = 0; i < thisClass.PropertyTypes.Length; i++)
            {

                string propertyName;
                if (thisClass.PropertyTypes[i].Name == fullClassName)
                {
                    if (thisClass.PropertyTypes[i] is NHibernate.Type.ManyToOneType || thisClass.PropertyTypes[i] is NHibernate.Type.OneToOneType)
                    {
                        propertyName = thisClass.PropertyNames[i];
                        List<object> results = this.HQLQuery<object>("from " + thisClassPair.Key + " as refClass where refClass."+propertyName+".id = '"+objectToCheck.ID+"'"); 

                    }
                }


            }

        }

        return 0;
    }
public int getReferenceCount(T objectToCheck),其中T:Interfaces.IDomainObject
{   
类型objectType=typeof(T);
字符串className=objectType.Name;
IDictionary myDictionary=session.SessionFactory.GetAllClassMetadata();
int referenceCount=0;
字符串fullClassName=objectType.FullName;
foreach(myDictionary中的var thisClassPair)
{
NHibernate.Metadata.IClassMetadata thisClass=thisClassPair.Value;
对于(int i=0;i
为什么不让他们尝试删除对象(int try block),如果出现错误,向他们显示对象已被引用。维护数据完整性是数据库的工作,这就是为什么需要FK。我不能这样做,因为删除被添加到一个事务中,当他们点击保存按钮时,事务会被执行。这样,他们就不必等到保存后才发现问题。为什么不让他们尝试删除对象(int try block),如果出现错误,向他们显示对象已被引用。维护数据完整性是数据库的工作,这就是为什么需要FK。我不能这样做,因为删除被添加到一个事务中,当他们点击保存按钮时,事务会被执行。这样,他们就不必等到存钱时才发现出了问题。
var persister = (NHibernate.Persister.Entity.AbstractEntityPersister)thisClass;
var cascadeStyle = persister.GetCascadeStyle(i);