Hi friends,

I have been developing an application using nhibernate. I have my
repository and I need to create a SafeDelete method to avoid cascade
operations. The users want to see what entities has related data to check
when delete and avoid cascades. I'm trying to implement a generic solution
using criteria, but I do not know how to get the reference column of the
related type. I am using fluent nhibernate to map my entities. For sample:

public override void SafeDelete(T entity){
    // get entity type
    var type = entity.GetType();

    // loop in properties
    foreach (var propertyInfo in type.GetProperties())
    {
        // check if it is a generic type, such as collections:
List<Child> for sample
        if (propertyInfo.PropertyType.IsGenericType)
        {
            // get the generic type
            Type genericType =
propertyInfo.PropertyType.GetGenericArguments().FirstOrDefault();

            // here, how to get the reference property ?
            long count =
this.Session.CreateCriteria(genericType).Add(Restrictions.Eq("INVERSE
PROPERTY HERE", entity.Id))

.SetProjection(Projections.Count(Projections.Id()))
                                     .UniqueResult<long>();

            // check the count and throw an exception to parent layer
            if (count > 0)
            {
                thrown new Exception("custom message");
            }
        }
    }

    // everything fine, delete!
    base.Delete(entity);}

I have both types, deleting and related, how could I get the reference
property on the related type?
Thank you.

-- 
______________________________________
Felipe B Oriani
felipeoriani.com.br felipeori...@gmail.com

-- 
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to fluent-nhibernate+unsubscr...@googlegroups.com.
To post to this group, send email to fluent-nhibernate@googlegroups.com.
Visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to