private void GenerateSetValuesDirect(ILBuilder processor, Func <MemberHandler, bool> cb1, Func <MemberHandler, bool> cb2) { // User u = (User)o; processor.DeclareLocal(_model); processor.LoadArg(2).Cast(_model).SetLoc(0); // set values int n = 0; foreach (var f in _info.Members) { if (!f.Is.DbGenerate && !f.Is.HasOne && !f.Is.HasMany && !f.Is.HasAndBelongsToMany) { if (!cb1(f)) { processor.LoadArg(1).LoadArg(0).LoadInt(n); if (cb2(f)) { processor.LoadInt(f.Is.Count ? 1 : 2) .Call(handlerBaseTypeNewSpKeyValueDirect); } else { processor.LoadLoc(0); processor.GetMember(f); if (f.Is.BelongsTo) { processor.CallVirtual(f.MemberType.GetMethod("get_ForeignKey")); } else if (f.Is.LazyLoad) { var it = f.MemberType.GetGenericArguments()[0]; processor.CallVirtual(f.MemberType.GetMethod("get_Value")); processor.Box(it); } else { processor.Box(f.MemberType); } processor.Call(handlerBaseTypeNewKeyValue); } processor.CallVirtual(keyOpValueListAdd); } n++; } } }
private void GenerateSetValuesForPartialUpdate(ILBuilder processor) { // User u = (User)o; processor.DeclareLocal(_model); processor.LoadArg(2).Cast(_model).SetLoc(0); // set values int n = 0; foreach (var f in _info.Members) { if (!f.Is.DbGenerate && !f.Is.HasOne && !f.Is.HasMany && !f.Is.HasAndBelongsToMany) { if (!f.Is.Key && (f.Is.UpdatedOn || f.Is.SavedOn || !f.Is.CreatedOn || f.Is.Count)) { if (f.Is.UpdatedOn || f.Is.SavedOn || f.Is.Count) { processor.LoadArg(1).LoadArg(0).LoadInt(n) .LoadInt(f.Is.Count ? 1 : 2) .Call(handlerBaseTypeNewSpKeyValueDirect).CallVirtual(keyOpValueListAdd); } else { processor.LoadArg(0).LoadArg(1).LoadLoc(0).LoadString(f.Name).LoadInt(n).LoadLoc(0); processor.GetMember(f); if (f.Is.BelongsTo) { processor.CallVirtual(f.MemberType.GetMethod("get_ForeignKey")); } else if (f.Is.LazyLoad) { var it = f.MemberType.GetGenericArguments()[0]; processor.CallVirtual(f.MemberType.GetMethod("get_Value")); processor.Box(it); } else { processor.Box(f.MemberType); } processor.Call(handlerBaseTypeAddKeyValue); } } n++; } } }