private void GenerateSetValue(TypeDefinition type, MemberHandler member, TypeReference memberType) { var method = new MethodDefinition("SetValue", CtMethodAttr, _handler.VoidType); method.Parameters.Add(new ParameterDefinition("obj", ParameterAttributes.None, _handler.ObjectType)); method.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, _handler.ObjectType)); var processor = new IlBuilder(method.Body); processor.LoadArg(1).Cast(_model).LoadArg(2).CastOrUnbox(memberType, _handler); processor.SetMember(member, _handler); processor.Return(); processor.Append(); type.Methods.Add(method); }
private void GenerateLoadSimpleValuesByIndex() { var method = new MethodDefinition("LoadSimpleValuesByIndex", MethodAttr, _handler.VoidType); method.Overrides.Add(_handler.LoadSimpleValuesByIndex); method.Parameters.Add(new ParameterDefinition("o", ParameterAttributes.None, _handler.ObjectType)); method.Parameters.Add(new ParameterDefinition("dr", ParameterAttributes.None, _handler.DataReaderInterface)); var processor = new IlBuilder(method.Body); // User u = (User)o; processor.DeclareLocal(_model); processor.LoadArg(1).Cast(_model).SetLoc(0); // set values int n = 0; foreach (var f in _info.SimpleMembers) { processor.LoadLoc(0); if (f.Is.AllowNull) { processor.LoadArg(0); } processor.LoadArg(2).LoadInt(n); var mi1 = Helper.GetMethodInfo(f.MemberType); if (f.Is.AllowNull || mi1 == null) { processor.CallVirtual(_handler.GetDataReaderMethodInt()); if (f.Is.AllowNull) { SetSecendArgForGetNullable(f, processor); processor.Call(_handler.ModelHandlerBaseTypeGetNullable); } // cast or unbox processor.CastOrUnbox(_handler.Import(f.MemberType), _handler); } else { processor.CallVirtual(_handler.Import(mi1)); } processor.SetMember(f, _handler); n++; } processor.Return(); processor.Append(); _result.Methods.Add(method); }
private void GenerateSetKeyValueDirect() { var method = new MethodDefinition("SetKeyValueDirect", MethodAttr, _handler.VoidType); method.Overrides.Add(_handler.SetKeyValueDirect); method.Parameters.Add(new ParameterDefinition("obj", ParameterAttributes.None, _handler.ObjectType)); method.Parameters.Add(new ParameterDefinition("key", ParameterAttributes.None, _handler.ObjectType)); var processor = new IlBuilder(method.Body); if (_info.KeyMembers.Length == 1) { var h = _info.KeyMembers[0]; processor.LoadArg(1).Cast(_model); processor.LoadArg(2); var fh = _info.KeyMembers[0]; if (fh.MemberType == typeof(long)) { processor.Call(_handler.ConvertToInt64); } else if (fh.MemberType == typeof(int)) { processor.Call(_handler.ConvertToInt32); } else if (fh.MemberType == typeof(Guid)) { processor.Unbox(_handler.Import(h.MemberType)); } else { processor.Cast(_handler.Import(h.MemberType)); } processor.SetMember(h, _handler); } processor.Return(); processor.Append(); _result.Methods.Add(method); }