private static T GetTypedValueDefault(DbDataReader reader, int ordinal)
            {
                Type underlyingType = Nullable.GetUnderlyingType(typeof(T));

                if (underlyingType != (Type)null && underlyingType.IsEnum())
                {
                    return((T)Shaper.ErrorHandlingValueReader <T> .GetGenericTypedValueDefaultMethod(underlyingType).Invoke((object)null, new object[2]
                    {
                        (object)reader,
                        (object)ordinal
                    }));
                }
                bool isNullable;

                return((T)CodeGenEmitter.GetReaderMethod(typeof(T), out isNullable).Invoke((object)reader, new object[1]
                {
                    (object)ordinal
                }));
            }
示例#2
0
            private static T GetTypedValueDefault(DbDataReader reader, int ordinal)
            {
                var underlyingType = Nullable.GetUnderlyingType(typeof(T));

                // The value read from the reader is of a primitive type. Such a value cannot be cast to a nullable enum type directly
                // but first needs to be cast to the non-nullable enum type. Therefore we will call this method for non-nullable
                // underlying enum type and cast to the target type.
                if (underlyingType != null &&
                    underlyingType.IsEnum())
                {
                    var methodInfo = GetGenericTypedValueDefaultMethod(underlyingType);
                    return((T)methodInfo.Invoke(null, new object[] { reader, ordinal }));
                }

                // use the specific reader.GetXXX method
                bool isNullable;
                var  readerMethod = CodeGenEmitter.GetReaderMethod(typeof(T), out isNullable);
                var  result       = (T)readerMethod.Invoke(reader, new object[] { ordinal });

                return(result);
            }
示例#3
0
            private static T GetTypedValueDefault(DbDataReader reader, int ordinal)
            {
                var underlyingType = Nullable.GetUnderlyingType(typeof(T));

                // The value read from the reader is of a primitive type. Such a value cannot be cast to a nullable enum type directly
                // but first needs to be cast to the non-nullable enum type. Therefore we will call this method for non-nullable
                // underlying enum type and cast to the target type.
                if (underlyingType != null &&
                    underlyingType.IsEnum)
                {
                    var type = typeof(ErrorHandlingValueReader <>).MakeGenericType(underlyingType);
                    return((T)type.GetMethod(
                               MethodBase.GetCurrentMethod().Name, BindingFlags.NonPublic | BindingFlags.Static).Invoke(
                               null, new object[] { reader, ordinal }));
                }

                // use the specific reader.GetXXX method
                bool isNullable;
                var  readerMethod = CodeGenEmitter.GetReaderMethod(typeof(T), out isNullable);
                var  result       = (T)readerMethod.Invoke(reader, new object[] { ordinal });

                return(result);
            }