zoukankan      html  css  js  c++  java
  • NBear.Mapping使用教程(1):从哪里入手

    在新版本的NBearMapping中,你不需要手工去实例化ObjectMapper 对象。取而代之的是ObjectConvertor类,在这个类中提供了多种的静态重载方法,来方便你使用。主要的方法重载有:ToObjectToListToDataTable。

    ToObject

       1: public static OutputType ToObject<OutputType>(object inputObject)
       2: public static OutputType ToObject<InputType, OutputType>(InputType inputObject)
       3: public static OutputType ToObject<InputType, OutputType, InitType>(InputType inputObject)
       4: public static OutputType ToObject<InputType, OutputType, InitType>(InputType inputObject, string viewName)
       5: public static OutputType ToObject<OutputType>(object inputObject, string viewName)
       6: public static OutputType ToObject<InputType, OutputType>(InputType inputObject, string viewName)
       7: public static object ToObject(Type inputType, Type outputType, Type initType, object inputObject)
       8: public static object ToObject(Type inputType, Type outputType, Type initType, object inputObject, string viewName)

    这些重载方法几乎涵盖了,有可能的多种映射需求。重载(1)描述的是一种最简单的映射需求,你只需要传入源对象,指定目标对象的类型,NBear就会自动帮你创建好对象,并将源对象的字段值赋给目标对象对应的字段,返回输出给你。重载(2)除了要你传入源对象外,还要求你指定输入和输出类型。为什么要指定输入类型?当源对象的类型inputObject是这里指定的输入类型InputType的一个子类,inputObject可能会有很多字段并不是在InputType定义的,但是我们只想对InputType里的字段进行映射,这里显式的指定一个输入类型可以保证你的需求能够被正确描述:比如

       1: interface IUser
       2: {
       3:     string Name { get;set;}
       4: }
       5: public class UserObject : IUser
       6: {
       7:     #region IUser Members
       8:  
       9:     public string Name
      10:     {
      11:         get
      12:         {
      13:             throw new Exception("The method or operation is not implemented.");
      14:         }
      15:         set
      16:         {
      17:             throw new Exception("The method or operation is not implemented.");
      18:         }
      19:     }
      20:  
      21:     #endregion
      22:  
      23:     public string Password;
      24: }

    IUser里定义了一个用户的所有属性,UserObject继承实现了这些属性,但是此时它本身还有一个Password字段,由于这个字段的特殊意义,我们将不希望它参与对象间的映射。所以我们可以指定它的InputTypeIUser。重载(3)中,除了指定输入和输出类型外,还必须指定一个初始化类型。与上面的输入类型相同,有些情况下我们指定的输出类型可能并没有公有构造函数,或者输入类型是一个接口,这时为了让NBearMapping能够正确实例化目标对象,你就必须指定一个带有公有无参构造的初始化类型,这个类型正常情况下是InputType的一个子类。重载(4)指定的viewName是显式的指定你所希望使用的配置节点。这种重载的使用,你必须保证当前的NBearMapping配置中存在这个viewName的配置节点。NBearMapping的配置系统在稍后的章节中会详细介绍。

    以上就是ToObject这个方法使用的重点,其它重载都是为了方便使用,对参数进行一定的组合。

    ToList

       1: public static List<OutputType> ToList<InputType, OutputType>(object inputList)
       2: public static List<OutputType> ToList<InputType, OutputType, InitType>(object inputList)
       3: public static List<OutputType> ToList<InputType, OutputType>(object inputList, string viewName)
       4: public static List<OutputType> ToList<InputType, OutputType, InitType>(object inputList, string viewName)
       5: public static List<OutputType> ToList<OutputType>(object inputList, Type inputType, Type initType, string viewName)

    ToList方法,对数组或集合进行成批的映射,或将DataTable,IDataReader转为数据对象集合。这里的InputTye,OutputType是数组或集合内所存放的对象类型。需要注意的是,ToList方法与ToObject共用配置。换句话,ToList方法相当只是循环使用ToObject方法,但是在进行集合映射时,推荐你使用这个接口,这样可以保证性能最优化。ToList传入的inputList参数,必须是一个DataTable,IDataReader,或是IEnumerable的对象。

    ToDataTable

       1: public static DataTable ToDataTable(object inputList, Type inputType)
       2: public static DataTable ToDataTable(object inputList, Type inputType, string viewName)

    ToDataTable,将数组或集合转为DataTable。

    除此之外,你也可以通过自己实现例化ObjectMapper 对象,来实现完成自己的特定的映射需求。

    本篇完

    阿不

     

    2007/12/17 更新了文中的一些错误,谢谢李永京的勘误,再向他的认真表示感谢!

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/hjf1223/p/996856.html
Copyright © 2011-2022 走看看