예제 #1
0
        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);
        }
예제 #2
0
        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);
        }