Exemple #1
0
        private DynamicMethod CreateDynamicMethod()
        {
            DynamicMethod dm = new DynamicMethod("ObjectFromDataReader<" + this.entityType.FullName + ">", typeof(object), new Type[] { typeof(IDataReader) });

            cil = dm.GetILGenerator();

            // T entity = new T();
            LocalBuilder entityVar = cil.DeclareLocal(this.entityType);

            cil.Emit(OpCodes.Newobj, this.entityType.GetConstructor(emptyTypeArray));
            cil.Emit(OpCodes.Stloc_0);

            var properties          = entityType.GetProperties().ToDictionary(x => x.Name);
            var columnToPropertyMap = EntityMetadata.GetEntityMetadata(entityType)?.ColumnToPropertyMap;
            int fieldCount          = reader.FieldCount;

            for (int fieldOrdinal = 0; fieldOrdinal < fieldCount; fieldOrdinal++)
            {
                string fieldName = reader.GetName(fieldOrdinal);
                if (TryFindMappingProperty(columnToPropertyMap, properties, fieldName, out PropertyInfo pi))
                {
                    EmitCilForOneField(fieldOrdinal, pi);
                }
            }

            // return entity;
            cil.Emit(OpCodes.Ldloc_0);
            cil.Emit(OpCodes.Ret);
            return(dm);
        }
Exemple #2
0
 public static EntityMetadata GetEntityMetadata(this Type entityType)
 {
     return(EntityMetadata.GetEntityMetadata(entityType));
 }