示例#1
0
        internal override object FindById(object id)
        {
            Type          type          = Proxy.ProxyType;
            MethodInfo    mi            = type.GetMethod(MethodName());
            ParameterInfo pi            = mi.GetParameters().First();
            Type          parameterType = pi.ParameterType;
            object        qType         = r.InstanceFromType(parameterType);

            w.SetValue(qType, "WHERE", string.Format("{0}='{1}'", Metadata.Schema.IdAttribute.Name, id));
            var parameterList = MifUtils.GetParameterListForQuery(qType);

            Type[] typesFromParameters = DynamicProxyUtil.TypesFromParameters(parameterList);
            object result     = Proxy.CallMethod(MethodName(), typesFromParameters, parameterList.ToArray());
            var    enumerable = result as IEnumerable;

            if (enumerable == null)
            {
                return(null);
            }

            IEnumerator enumerator = enumerable.GetEnumerator();

            if (enumerator.MoveNext())
            {
                return(enumerator.Current);
            }
            return(null);
        }
示例#2
0
        public override object InvokeProxy()
        {
            var parameterList = MifUtils.GetParameterList(RootInterfaceObject);
            var types         = new Type[parameterList.Length];

            try {
                for (int i = 0; i < parameterList.Length; i++)
                {
                    types.SetValue(parameterList.GetValue(i).GetType(), i);
                }
                var result = Proxy.CallMethod(MethodName(), types, parameterList);
                return(result);
            }
            catch (Exception e) {
                var rootException = ExceptionUtil.DigRootException(e);
                throw rootException;
            }
        }