在nhibernate中,如何确定映射的实体是否具有cascade ="all"?

Isa*_*ger 0 c# nhibernate

我正在制作一个通用的nhibernate方法,可以在运行时给定一个实例化的nhibernate映射对象,如果该对象被"数据库"中的某个其他对象引用.

这样,我将能够允许用户删除未被引用的对象,并抛出错误(如果有的话)(以及有关引用对象的内容的一些信息).

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

所以,我只需要知道如何使用Nhibernate.MetaData.IClassMetaData来确定'实体类型'或包是否为cascade = all.寻找几分钟后我似乎无法找到它.

有什么想法吗?

谢谢

艾萨克

PS这里是方法代码(未完成).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;
    }
Run Code Online (Sandbox Code Playgroud)

Die*_*hon 5

var persister = (NHibernate.Persister.Entity.AbstractEntityPersister)thisClass;
var cascadeStyle = persister.GetCascadeStyle(i);
Run Code Online (Sandbox Code Playgroud)