List <IMemberBinder> CreateMemberBinders(IDbContext dbContext) { ObjectMemberMapper mapper = this.ConstructorDescriptor.GetEntityMemberMapper(); List <IMemberBinder> memberBinders = new List <IMemberBinder>(this.PrimitiveMembers.Count + this.ComplexMembers.Count + this.CollectionMembers.Count); foreach (var kv in this.PrimitiveMembers) { MRMTuple mrmTuple = mapper.GetMappingMemberMapper(kv.Key); PrimitiveMemberBinder binder = new PrimitiveMemberBinder(kv.Key, mrmTuple, kv.Value); memberBinders.Add(binder); } foreach (var kv in this.ComplexMembers) { MemberValueSetter setter = mapper.GetMemberSetter(kv.Key); IObjectActivator memberActivtor = kv.Value.CreateObjectActivator(dbContext); ComplexMemberBinder binder = new ComplexMemberBinder(setter, memberActivtor); memberBinders.Add(binder); } foreach (var kv in this.CollectionMembers) { MemberValueSetter setter = mapper.GetMemberSetter(kv.Key); IObjectActivator memberActivtor = kv.Value.CreateObjectActivator(dbContext); CollectionMemberBinder binder = new CollectionMemberBinder(setter, memberActivtor); memberBinders.Add(binder); } return(memberBinders); }
public IObjectActivator CreateObjectActivator(IDbContext dbContext) { EntityMemberMapper mapper = this.ConstructorDescriptor.GetEntityMemberMapper(); List <IValueSetter> memberSetters = new List <IValueSetter>(this.MappingMembers.Count + this.ComplexMembers.Count); foreach (var kv in this.MappingMembers) { IMRM mMapper = mapper.TryGetMappingMemberMapper(kv.Key); MappingMemberBinder binder = new MappingMemberBinder(mMapper, kv.Value); memberSetters.Add(binder); } foreach (var kv in this.ComplexMembers) { Action <object, object> del = mapper.TryGetComplexMemberSetter(kv.Key); IObjectActivator memberActivtor = kv.Value.CreateObjectActivator(); ComplexMemberBinder binder = new ComplexMemberBinder(del, memberActivtor); memberSetters.Add(binder); } Func <IDataReader, ReaderOrdinalEnumerator, ObjectActivatorEnumerator, object> instanceCreator = this.ConstructorDescriptor.GetInstanceCreator(); List <int> readerOrdinals = this.ConstructorParameters.Select(a => a.Value).ToList(); List <IObjectActivator> objectActivators = this.ConstructorEntityParameters.Select(a => a.Value.CreateObjectActivator()).ToList(); ObjectActivator ret; if (dbContext != null) { ret = new ObjectActivatorWithTracking(instanceCreator, readerOrdinals, objectActivators, memberSetters, this.CheckNullOrdinal, dbContext); } else { ret = new ObjectActivator(instanceCreator, readerOrdinals, objectActivators, memberSetters, this.CheckNullOrdinal); } return(ret); }