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); }
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; } }