SqlMetal.exe这个程序自动生成的DataContext类有很多问题,导致我们不能直接使用,所以我们有必要先生成DBML文件,并做一些修改,然后再生成DataContext类。
  我们需要修改的有如下几种情况:
  1、我们有自定义的Info类,但存储过程又会生成新的Info类,我们需要一一更改为自己的Info类,并删除自动生成的Info类。
  2、我们有自定义的枚举,我们需要在涉及到这些枚举类型的地方一一修改为自定义的枚举类型。
  3、当存储过程中使用了sp_executesql语句时,SqlMetal.exe程序会认为返回的不是一个结果集,而是一个Int,这时我们需要修改它的返回类型。
  本系统的考虑的情况比较简单,该代码生成器假定关于这个Table的所有返回类型都是一样的,形如TableNameInfo。
  这样一来,我们需要配置的,就只有枚举了。其它的几种情况我们可以用程序处理:判断Interface的返回类型,如果是Info或者IList,就将DBML中该存储过程的返回类型改成自定义的Info类名。
  枚举的配置如下:

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <root>
    3     <tables>
    4         <item name="Employee" field="EmployeeStatus" value="EmployeeStatusEnum" />
    5     </tables>
    6     <procedures>
    7         <item name="InsertEmployee" field="EmployeeStatus" value="EmployeeStatusEnum" />
    8         <item name="UpdateEmployeeByEmployeeId" field="EmployeeStatus" value="EmployeeStatusEnum" />
    9         <item name="GetEmployeesByFilter" field="EmployeeStatus" value="EmployeeStatusEnum" />
   10     </procedures>
   11 </root>

  具体代码则相对比较简单,请参考源代码。
  值得注意的是,生成过程中,会在程序中调用SqlMetal.exe程序,将DBML文件转为DataContext类,删除无用的自动生成的Info类,必须要等该DataContext类生成之后才能进行。

转载于:https://blog.51cto.com/eallies/79010

综合应用WPF/WCF/WF/LINQ之二十九:代码生成器之DBMLToCode相关推荐

  1. 综合应用WPF/WCF/WF/LINQ之二十七:代码生成器之DBMLToProcedure

    本存储过程代码生成器能处理如下几种形式的存储过程: 1.形如InsertTableName的存储过程,用于插入某条记录. 2.形如UpdateTableNameByFieldName的存储过程,用于根 ...

  2. 综合应用WPF/WCF/WF/LINQ之三:采用用代码创建的方式实现CheckListBox的CustomControl

    以我们的Eallies OA系统为例,实现PageBase的方法如下: 1.在Eallies.OA.UI.Controls.Logical项目中添加一个纯的Class,并让其继承于System.Win ...

  3. 综合应用WPF/WCF/WF/LINQ之八:后台开发人员的Solution

    该Solution的所有Project如下: 下面对各个Project一一进行介绍: Eallies.OA.BLL:用于系统中BLL层的所有类的存放.该Project可以采用Eallies.Utili ...

  4. 综合应用WPF/WCF/WF/LINQ之十七:关于简化发布新版本的步骤的问题

    对于比较简单的项目,我们可以直接编译项目,然后将bin\Debug下面的文件Copy到发布目录即可. 但对于比较复杂的项目,如加入了配置文件的项目,则不能这样做.这时要求发布目录下的文件除xbap.m ...

  5. 综合应用WPF/WCF/WF/LINQ之一:DEV-WOW 作品源代码公布

    Eallies OA 使用说明 1.本程序在Windows 2003.SQL Server 2005.Visual Studio 2008环境下测试通过. 2.请将项目解压缩至某一目录下,如D:\Ea ...

  6. WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

    原文:WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载] 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码 ...

  7. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]

    WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过Ser ...

  8. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块

    实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...

  9. FreeSql (二十九)Lambda 表达式

    FreeSql 支持功能丰富的表达式函数解析,方便程序员在不了解数据库函数的情况下编写代码.这是 FreeSql 非常特色的功能之一,深入细化函数解析尽量做到满意,所支持的类型基本都可以使用对应的表达 ...

  10. 美学心得(第二百二十九集)罗国正

    美学心得(第二百二十九集) 罗国正 (2021年10月) 2999.清朝鉴赏家陆时化,字润之,号听松,是江苏太仓人.他的美学思想,非常值得大家关注.研究.现将他的观点摘要如下: 1.他强调先天文化之根 ...

最新文章

  1. python io流a+_Python基础——文件操作及IO流
  2. 我的网盘(云存储)功能需求,免费网盘需求,争取早日和百度网盘说拜拜
  3. redis应用之——注册、登录
  4. 使用Delphi7构建工商银行电子口令密码查找助手
  5. Linux 系统添加静态路由的方法
  6. Byval 和 ByRef 使用
  7. 大数据学习笔记40:Hive - 内置函数(3)
  8. 第一个冷门与真正的死亡之组
  9. Windows和Mac下的_stdcall
  10. python中三角函数计算
  11. 【文献笔记】【精读】Metamorph: Injecting Inaudible Commands into Over-the-air V oice Controlled Systems
  12. vim的下载及配置安装
  13. MacbookPro使用小记
  14. DDR(一)——基础理论
  15. 昆仑万维或将引领国内 AIGC 技术发展
  16. 电商ERP进销存系统V3多仓库带扫描php网页版B/S进销存系统多仓库版
  17. 使用opencv-python对图片进行球面投影
  18. 天空表白墙php源码,开源HTML5-PHP表白墙源码分享
  19. 马云、丁磊、刘强东都入局,AI养猪到底哪家强?
  20. Python 替换文件中内容

热门文章

  1. 【分享】如何创建自己的Visual Studio 2005/2008配色
  2. SLA服务可用性怎么达到?
  3. C语言中的循环结构与选择结构
  4. iOS-屏幕适配-UI布局
  5. Fiddler-抓取安卓手机APP请求地址
  6. POJ2083-Fractal
  7. ROS在rviz中实时显示轨迹(nav_msgs/Path消息的使用)
  8. 计算机系统中与存储有关的那些事
  9. SQL 存储过程 多条件 分页查询 性能优化
  10. WebServic调用天气预报服务