diff --git a/src/Z.Data/System.Data.IDataReader/IDataReader.ToEntity.cs b/src/Z.Data/System.Data.IDataReader/IDataReader.ToEntity.cs index 5e168401..d6c80793 100644 --- a/src/Z.Data/System.Data.IDataReader/IDataReader.ToEntity.cs +++ b/src/Z.Data/System.Data.IDataReader/IDataReader.ToEntity.cs @@ -3,7 +3,7 @@ // Issues: https://github.com/zzzprojects/Z.ExtensionMethods/issues // License (MIT): https://github.com/zzzprojects/Z.ExtensionMethods/blob/master/LICENSE // More projects: https://zzzprojects.com/ -// Copyright © ZZZ Projects Inc. All rights reserved. +// Copyright © ZZZ Projects Inc. All rights reserved. using System; using System.Collections.Generic; using System.Data; @@ -13,40 +13,46 @@ public static partial class Extensions { /// - /// An IDataReader extension method that converts the @this to an entity. - /// - /// Generic type parameter. - /// The @this to act on. - /// @this as a T. - public static T ToEntity(this IDataReader @this) where T : new() - { - Type type = typeof (T); - PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); - FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance); + /// An IDataReader extension method that converts the @this to an entity. + /// + /// Generic type parameter. + /// The @this to act on. + /// @this as a T. + public static T ToEntity(this IDataReader @this) where T : new() + { + if (@this.Read()) + { + Type type = typeof(T); + PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); + FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance); - var entity = new T(); + var entity = new T(); - var hash = new HashSet(Enumerable.Range(0, @this.FieldCount) - .Select(@this.GetName)); + var hash = new HashSet(Enumerable.Range(0, @this.FieldCount) + .Select(@this.GetName)); - foreach (PropertyInfo property in properties) - { - if (hash.Contains(property.Name)) - { - Type valueType = property.PropertyType; - property.SetValue(entity, @this[property.Name].To(valueType), null); - } - } + foreach (PropertyInfo property in properties) + { + if (hash.Contains(property.Name)) + { + Type valueType = property.PropertyType; + property.SetValue(entity, @this[property.Name].To(valueType), null); + } + } - foreach (FieldInfo field in fields) - { - if (hash.Contains(field.Name)) - { - Type valueType = field.FieldType; - field.SetValue(entity, @this[field.Name].To(valueType)); + foreach (FieldInfo field in fields) + { + if (hash.Contains(field.Name)) + { + Type valueType = field.FieldType; + field.SetValue(entity, @this[field.Name].To(valueType)); + } + } + + return entity; + } + else { + return default(T); } } - - return entity; - } -} \ No newline at end of file +}