Ado.net Mapping

       今天看了下ado.net 中介绍的Mapping 由于是英文书籍,看得一头雾水。msdn中也没说出个一二三来。只知道在Adapter对像中,同时在定义列的Mapping时需要引入using system.data.commn; 由于在平时应用中并没有用到这一块后在baidu中找到firstsee写的DataMapping简介文章(http://blog.donews.com/firstsee/archive/2007/02/02/1124372.aspx) DataMapping是一个简化版的ORM组件,它实现了最基本的继承、组合、一对一、一对多、多对一、多对多等对象关系。并且利用C#的语言特性实现了很多的有趣的,令你兴奋的功能。相对于其他大型的ORM框架它具有如下特点:

  1. 简单易学的Mapping方法——所有用于Mapping的基本特性只有5个;
  2. 自动分析对象之间的关系——在进行Mapping时你只需要知道数据表之间的关联关系以及每个属性的数据类型即可;
  3. 使用Attribute验证属性值——在需要进行数据验证的属性上你只需要为其定义你所使用的验证方法对应的Attribute即可,例如NotNull;
  4. 方便灵活的数据类型转换——可能在你Mapping的时候需要属性的数据类型与属性的数据类型不能够实现隐式转换,那么你只需使用Attribute告诉DataMapping这两种数据类型转换时所使用的类型转换器;
  5. 实体属性的延迟加载——如果实体的属性类型为另外一个实体或者实体的集合,那么在这个实体初始化的时候并不会对属性值进行级联加载,而只会在你第一次使用的时候才会从数据库中读取数据。然而这些都是由DataMapping去分析和处理的,你只需要像其他的属性一样定义get和set方法;
  6. 丰富的可重载接口——为了改进性能和特殊数据结构的需要,你可以通过对这些接口的重载而改变实体持久化时的每一个命令的每一个部分;
  7. 高效的批量数据持久化——为了解决实际应用中常见的批量数据操作的效率问题,DataMapping提供了多种持久化的批量数据操作接口,可以使大量的数据持久化操作在一次数据库交互中完成;
  8. 简单的配置——由于使用了Attribute的实体Mapping方式,大大减少了晦涩难懂的配置文件的使用。当然数据库连接除外;
  9. 可扩展的多数据库支持——在DataMapping中现在已经内置了对SqlServer和MySql数据库的支持。在需要其他的数据库支持时,只需要实现相应的provider就完全解决——其中只有几个很简单的方法需要自己去实现。

通常来看很多人都拿Hibernate等大型的ORM组件与其相比。但我在应用中确实很少涉及Ado.NET Mapping中的相关东西,现在附上一段代码,您可以从代码中体会他的用处,但我觉得这只是其中一小点,对于我没用过的东西真是不敢枉加评论,希望有深入了解的朋友告之。谢谢!

 class Program
   {
      static void Main(string[] args)
      {
         try
         {
            OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;Data Source=..\\..\\db.mdb");
            OleDbDataAdapter usersDataAdapter = new OleDbDataAdapter("SELECT ID, fn, ln, cty, st FROM tabUsers", dbConn);
            DataSet usersDataSet = new DataSet("User");
            DoDataMappings(usersDataAdapter);
            usersDataAdapter.Fill(usersDataSet);
            foreach (DataRow r in usersDataSet.Tables["tabUsers"].Rows)
            {
               Console.WriteLine("ID: {0}, FirstName: {1}, LastName: {2}, City: {3}, State: {4}", r["UserID"], r["FirstName"], r["LastName"], r["City"], r["State"]);
            }
         }
         catch (Exception ex)
         {
            Console.WriteLine(ex.Message);
         }
      }

      private static void DoDataMappings(OleDbDataAdapter dataAdapter)
      {
         try
         {
            // Define an array of columns to map.
            DataColumnMapping[] mappedColumns = {
               new DataColumnMapping("ID", "UserID"),
               new DataColumnMapping("fn", "FirstName"),
               new DataColumnMapping("ln", "LastName"),
               new DataColumnMapping("cty", "City"),
               new DataColumnMapping("st", "State")
            };

            // Define the table containing the mapped columns.
            DataTableMapping usersTableMapping = new DataTableMapping("Table", "tabUsers", mappedColumns);

            // Activate the mapping mechanism.
            dataAdapter.TableMappings.Add(usersTableMapping);
         }
         catch (Exception ex)
         {
            Console.WriteLine(ex.ToString());
         }
      }
   }

 

同时,DataAdapter中的MissingMappingAction and MissingSchemaAction两个属性。前者确定传入数据没有匹配的表或列时需要执行的操作。后者将为 DataAdapter MissingSchemaAction 属性设置为 AddWithKey 与类似使用 DataAdapter.FillSchema 方法。 这两种方法添加主键、 自动增加 字段、 为空的字段和唯一索引的架构信息。 到于什么时候应用,请参见msdn上有详细说明。

你可能感兴趣的:(mapping)