综合应用WPF/WCF/WF/LINQ之二十八:代码生成器之DBMLToInfo

简介:
自动生成Info类的另外一个重要的原因在于,在一般的情况下,这些Info类没有可能一次就完全确定下来而不再修改,有了这个工具后,如果数据库结构有修改,则不必手工去更改代码,只需要重新运行一个Info类的代码生成器即可。
  为了让Info类适合一些逻辑要求,本Info类代码生成器需要手工进行一些必要的配置。如:一个Table中有DepartmentId字段,在一般情况下也需要将DepartmentName加到Info类中;一个Table有详细记录列表,则一般情况下也应该在该Info类中加一个IList类型的容纳记录列表的字段等。
  这些配置有些情况下是无法用代码自动完成的,所以必须手工配置。不过好在配置也并不复杂,而且一旦配置,后续就可以重复使用。其配置举例如下:
    1  <? xml   version =" 1.0"   encoding =" utf-8"  ?>
    2  < root >
    3      < tables >
    4          < item   name =" Department" >
    5              < associations >
    6                  < item   name =" Departments"   from =" Department"   alias =" parent"   source =" DepartmentParent"   nullable =" true"   delete =" true"  />
    7              </ associations >
    8          </ item >
    9          < item   name =" Employee" >
   10              < additions >
   11                  < item   name =" DepartmentName"   from =" Department"   source =" DepartmentId"   target =" DepartmentId"  />
   12                  < item   name =" PositionName"   from =" Position"   source =" PositionId"   target =" PositionId"  />
   13                  < item   name =" EmployeeName"   alias =" ManagerName"   table =" Manager"   from =" Employee"   source =" EmployeeManager"   target =" EmployeeId"  />
   14              </ additions >
   15          </ item >
   16      </ tables >
   17      < removes >
   18          < item   name =" Table"  />
   19      </ removes >
   20  </ root >
  对于该Table已经存在的字段来说,则不用进行任何配置,我们需要配置的,只是一些“异常”的字段。如附加字段(置于additions标识下)、关联记录(置于associations标识下)等。
  下面列举出主体部分的代码。其中处理较麻烦的部分在于有些字段可以为空,因此需要采用Nullable<>这样的范型类型。
    1      for ( int i = 0; i < columns.Count; i++)
    2     {
    3         strContentes = strContentes +  "        [DataMember]" +  "\n";
    4 
    5          if (islinqs[i].ToString() ==  "True")
    6         {
    7             strContentes +=  string.Format( "        [Column(Storage = \"_{0}\", DbType = \"{1}\", CanBeNull = {2})]" +  "\n", columns[i].ToString(), dbtypes[i].ToString(), canbenulls[i].ToString());
    8         }
    9 
   10          if (canbenulls[i] !=  null && canbenulls[i].ToString() ==  "true" && types[i].ToString() !=  "String")
   11         {
   12             strContentes +=  string.Format( "        public Nullable<{0}> {1}" +  "\n", types[i].ToString(), columns[i].ToString());
   13         }
   14          else
   15         {
   16             strContentes +=  string.Format( "        public {0} {1}" +  "\n", types[i].ToString(), columns[i].ToString());
   17         }
   18 
   19         strContentes = strContentes +  "        {" +  "\n";
   20         strContentes +=  string.Format( "            get {{ return this._{0}; }}" +  "\n", columns[i].ToString());
   21         strContentes +=  string.Format( "            set {{ this._{0} = value; }}" +  "\n", columns[i].ToString());
   22         strContentes = strContentes +  "        }" +  "\n";
   23 
   24          if (i != columns.Count - 1)
   25         {
   26             strContentes = strContentes +  "        " +  "\n";
   27         }
   28     }
  至于XML的解析,可以采用反序列化的方法,直接一下子就把整个XML转化为类,这比起一步一步的解析XML来说,要容易得多了,具体请参考源代码。




本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79012,如需转载请自行联系原作者
目录
相关文章
|
开发者 开发工具 定位技术
|
10月前
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
9月前
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
38 0
|
9月前
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
62 0
|
10月前
Visual Studio 2022 创建 WCF服务 找不到
Visual Studio 2022 创建 WCF服务 找不到
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
102 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF使用纯代码的方式进行服务寄宿
服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以以纯代码的方式实现服务的寄宿工作。
850 0