代码生成利器-NCodeGenerate 教程(9) 数据类型映射Map功能

  在用NCodeGenerate做代码生成的过程中,免不了经常会从数据库类型到C#类型之间的来回映射,如果这样的映射都要用代码来写的话就太繁琐了,NCodeGenerate和CodeSmith类似,以提供的通过XML文件来定义类型映射的功能,称之为Map映射功能.

  现在举个例子说明一下:

首先在NCodeGenerate 中新建Map 文件

 

  1 xml version="1.0" encoding="utf-8"?>
  2 <NCodeGenerate xmlns="http://www.NCodeGenerate.com/schema/CGmap.xsd">
  3   <map caseSensitive="true" returnKeyWhenNotFound="false" description="DbType to CSharp">
  4     <item>
  5       <key>AnsiStringkey>
  6       <value>stringvalue>
  7     item>
  8     <item>
  9       <key>AnsiStringFixedLengthkey>
 10       <value>stringvalue>
 11     item>
 12     <item>
 13       <key>Binarykey>
 14       <value>byte[]value>
 15     item>
 16     <item>
 17       <key>Booleankey>
 18       <value>boolvalue>
 19     item>
 20     <item>
 21       <key>Bytekey>
 22       <value>bytevalue>
 23     item>
 24     <item>
 25       <key>Currencykey>
 26       <value>decimalvalue>
 27     item>
 28     <item>
 29       <key>Datekey>
 30       <value>DateTimevalue>
 31     item>
 32     <item>
 33       <key>DateTimekey>
 34       <value>DateTimevalue>
 35     item>
 36     <item>
 37       <key>Decimalkey>
 38       <value>decimalvalue>
 39     item>
 40     <item>
 41       <key>Doublekey>
 42       <value>doublevalue>
 43     item>
 44     <item>
 45       <key>Guidkey>
 46       <value>Guidvalue>
 47     item>
 48     <item>
 49       <key>Int16key>
 50       <value>shortvalue>
 51     item>
 52     <item>
 53       <key>Int32key>
 54       <value>intvalue>
 55     item>
 56     <item>
 57       <key>Int64key>
 58       <value>longvalue>
 59     item>
 60     <item>
 61       <key>Objectkey>
 62       <value>objectvalue>
 63     item>
 64     <item>
 65       <key>SBytekey>
 66       <value>sbytevalue>
 67     item>
 68     <item>
 69       <key>Singlekey>
 70       <value>floatvalue>
 71     item>
 72     <item>
 73       <key>Stringkey>
 74       <value>stringvalue>
 75     item>
 76     <item>
 77       <key>StringFixedLengthkey>
 78       <value>stringvalue>
 79     item>
 80     <item>
 81       <key>Timekey>
 82       <value>TimeSpanvalue>
 83     item>
 84     <item>
 85       <key>UInt16key>
 86       <value>ushortvalue>
 87     item>
 88     <item>
 89       <key>UInt32key>
 90       <value>uintvalue>
 91     item>
 92     <item>
 93       <key>UInt64key>
 94       <value>ulongvalue>
 95     item>
 96     <item>
 97       <key>VarNumerickey>
 98       <value>decimalvalue>
 99     item>
100     <item>
101       <key>DateTime2key>
102       <value>DateTimevalue>
103     item>
104     <item>
105       <key>DateTimeOffsetkey>
106       <value>DateTimeOffsetvalue>
107     item>
108   map>
109 NCodeGenerate>

这个文件的结构非常简单,主要就是定义了 DBType类型到 CSharp 类型的K/V字典. 把文件保存到程序根目录下面的 Maps 子目录 DbType2CSharp.cgmap。

注意:目前系统只从 Maps目录取映射文件。

新建模板文件输入代码:

 1 @model DynamicCodeGenerate.myModel
 2 @using NCodeGenerateIDE;
 3 @{
 4 CGMap map=CGMap.LoadMap("DbType2CSharp");
 5 }
 6 @{
 7  8 foreach(var item in Model.DataBase.Tables){
 9     @:TableName:@item.Name
10       foreach(var itemcolumn in item.Columns)
11       {
12                   @:Column:@itemcolumn.Name
13                   @:ColumnDataType:@itemcolumn.DataType.ToString() CSharpType:@map[itemcolumn.DataType.ToString()]
14       }
15     
16       
17 }
18 
19 }

看上面的代码 第4行 定义了一个CGMap的对象,注意LoadMap方法的参数,不需要输入路径名和文件后缀名。

在看代码中的 第13行 @map[itemcolumn.DataType.ToString()]  这句代码就是根据数据库列的DBType类型取 CSharp的类型名字。就像用普通的Dictionary 类型一样使用。

目前系统提供了:

DbType2CSharp

DbType2DataReaderMethod

Oracle2CSharp

Sql2CSharp

Sql2System

SqlNativeType2DbType

SqlNativeType2SqlDbType

System2CSharpAlias

 8种映射,如果不够的话,大家可以自己定义新的映射表。

 

附: NCodeGenerate 新增了  NCodeGenerate.DBSchema 的文档,在下面的文档连接中。

附上下载地址:

NCodeGenerate.zip

文档:文档

 

NCodeGenerate 系列文章:

一、代码生成利器-NCodeGenerate 是什么?

二、代码生成利器-NCodeGenerate 教程(1) 遍历数据库内的所有表

三、代码生成利器-NCodeGenerate 教程(2) NCodeGenerate的代码公用之一

四、代码生成利器-NCodeGenerate 教程(3) 生成代码到文件.

五、代码生成利器-NCodeGenerate 教程(4) CodeSmith模板转换

六、代码生成利器-NCodeGenerate 教程(5) 多种数据库的支持

七、代码生成利器-NCodeGenerate 教程(6) 调试功能 NTrace 输出

八、代码生成利器-NCodeGenerate 教程(7) 揭开调试功能 的神秘面纱

九、代码生成利器-NCodeGenerate 教程(8) 揭开Razor模板引擎的神秘面纱

十、代码生成利器-NCodeGenerate 教程(9) 数据类型映射Map功能

 

转载于:https://www.cnblogs.com/NCodeGenerate/archive/2013/01/14/NCodeGenerate_10.html

你可能感兴趣的:(数据库,c#)