internal void completeProperty(Serializable incompleteObject, string propertyName, object propertyValue, bool ignoreLazyProperty)
        {
            if (incompleteObject.getFetchType(propertyName) == FetchType.EAGER || !ignoreLazyProperty)
            {
                if (incompleteObject.isOneToManyProperty(propertyName))
                {
                    completeOneToManyProperty(incompleteObject, propertyName);
                }

                if (typeof(Serializable).IsAssignableFrom(incompleteObject.getPropertyType(propertyName)) && propertyValue != null)
                {
                    Serializable serializableProperty = (Serializable)propertyValue;

                    Type propertyType = serializableProperty.GetType();

                    object propertyId = serializableProperty.getPkValue();

                    serializableProperty = (Serializable)selectById(propertyId, propertyType);

                    incompleteObject.GetType().GetProperty(propertyName).SetValue(incompleteObject, serializableProperty);
                }
            }
        }