В nhibernate, как я могу определить, имеет ли сопоставленная сущность cascade = "all"? - PullRequest
0 голосов
/ 19 февраля 2011

Я делаю общий метод nhibernate, который может определить, с учетом экземпляра сопоставленного объекта nhibernate во время выполнения, если на этот объект ссылается какой-либо другой объект в «базе данных».

Таким образом, я смогу разрешить пользователю удалять объекты, если на них нет ссылок, и выдавать ошибки, если они есть (вместе с некоторой информацией о том, сколько объектов ссылается на объект).

Я наткнулся на загадку, хотя, когда сущность отображается каскадом = все, я хочу, чтобы они могли удалить эту вещь, даже если другие объекты ссылаются на нее.

Итак, мне просто нужно знать, как я могу использовать Nhibernate.MetaData.IClassMetaData, чтобы определить, является ли «тип сущности» или мешок каскадным = все. Кажется, я не могу найти его после нескольких минут поиска.

Есть мысли?

Спасибо

Isaac

P.S. вот код метода (незаконченный). 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;
    }

1 Ответ

5 голосов
/ 19 февраля 2011
var persister = (NHibernate.Persister.Entity.AbstractEntityPersister)thisClass;
var cascadeStyle = persister.GetCascadeStyle(i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...