public virtual string GetObjectKey(object obj)
        {
            string    key      = "";
            IClassMap classMap = m_ObjectManager.Context.DomainMap.MustGetClassMap(obj.GetType());
            string    sep      = classMap.KeySeparator;

            if (sep == "")
            {
                sep = " ";
            }
            object value;

            foreach (IPropertyMap propertyMap in classMap.GetKeyPropertyMaps())
            {
                value = m_ObjectManager.GetPropertyValue(obj, propertyMap.Name);
                if (value == null || m_ObjectManager.GetNullValueStatus(obj, propertyMap.Name))
                {
                    return("");
                }
                if (!(propertyMap.ReferenceType == ReferenceType.None))
                {
                    value = m_ObjectManager.GetObjectKey(value);
                    if (((string)value).Length < 1)
                    {
                        return("");
                    }
                }
                key += Convert.ToString(value) + sep;
            }
            if (key.Length > sep.Length)
            {
                key = key.Substring(0, key.Length - sep.Length);
            }
            return(key);
        }