C# - IDataReader to Object mapping using generics

后端 未结 10 744
情歌与酒
情歌与酒 2020-12-16 19:07

How can I map a DataReader object into a class object by using generics?

For example I need to do the following:

public class Mapper
    {
          


        
10条回答
  •  青春惊慌失措
    2020-12-16 19:38

    I use ValueInjecter for this

    I'm doing like this:

     while (dr.Read())
      {
          var o = new User();
          o.InjectFrom(dr);
          yield return o;
      }
    

    you gonna need this ValueInjection for this to work:

    public class DataReaderInjection : KnownSourceValueInjection
        {
            protected override void Inject(IDataReader source, object target, PropertyDescriptorCollection targetProps)
            {
                for (var i = 0; i < source.FieldCount; i++)
                {
                    var activeTarget = targetProps.GetByName(source.GetName(i), true);
                    if (activeTarget == null) continue;
    
                    var value = source.GetValue(i);
                    if (value == DBNull.Value) continue;
    
                    activeTarget.SetValue(target, value);
                }
            }
        }
    

提交回复
热议问题