private void GetParamFromReader(PropertyInfo[] properties, CoreBase clone, System.Data.IDataReader idr) { foreach (PropertyInfo info in properties) { if (!info.PropertyType.IsPrimitive && !info.PropertyType.IsValueType && info.PropertyType != typeof(System.String) && info.PropertyType != typeof(System.Text.StringBuilder) && info.Name.Substring(info.Name.Length - 2, 2) != "_P" && !info.PropertyType.IsGenericType) { if (info.PropertyType.ToString() == "System.Byte[]") { //clone.GetType().GetProperty(info.Name).SetValue(clone, idr[info.Name], null); } else { Type childType = info.PropertyType; //CoreBase childClone = (CoreBase)Activator.CreateInstance(childType); CoreBase childClone = GetParamFromReader(childType, idr); //Type t1 = childClone.GetType(); //info.PropertyType.InvokeMember( //clone.GetType().GetProperty(info.Name).SetValue(clone, ((childType)childClone), null); MethodInfo castMethod = this.GetType().GetMethod("Cast").MakeGenericMethod(childType); //object castedObject = castMethod.Invoke(null, new object[] { childClone }); clone.GetType().GetProperty(info.Name).SetValue(clone, castMethod.Invoke(null, new object[] { childClone }), null); //clone.GetType().GetProperty(info.Name).SetValue(clone, Cast<XMBank.Core.CompanySetup.Company>(childClone), null); } } else { //info.Name exists in dataReader if (DataRecordExtensions.HasColumn(idr, info.Name) && !DataRecordExtensions.IsNull(idr, info.Name)) { clone.GetType().GetProperty(info.Name).SetValue(clone, idr[info.Name], null); } } } }
public CoreBase GetObjectByID() { System.Data.IDataReader idr = null; ParameterManager Params; try { Params = new ParameterManager(this._DMLCore); IDatabaseHelper helper = new DatabaseFactory().CreateDBHelper(base.DBType, StoredProcedureName); //idr = helper.ExecuteReader(Params.Parameters); using (idr = helper.ExecuteReader(Params.Parameters)) { if (idr.Read()) { Type coreType = _DMLCore.GetType(); PropertyInfo[] properties = coreType.GetProperties(); foreach (PropertyInfo info in properties) { //info.Name exists in dataReader if (DataRecordExtensions.HasColumn(idr, info.Name) && !DataRecordExtensions.IsNull(idr, info.Name)) { coreType.GetProperty(info.Name).SetValue(_DMLCore, idr[info.Name], null); } } //coreType.GetProperty("").SetValue(_DMLCore, "", null); } } } catch (Exception) { throw; } finally { //if (idr != null) //{ // idr.Close(); // idr.Dispose(); //} } return(_DMLCore); }