博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
综合应用WPF/WCF/WF/LINQ之二十九:代码生成器之DBMLToCode
阅读量:6893 次
发布时间:2019-06-27

本文共 1186 字,大约阅读时间需要 3 分钟。

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类生成之后才能进行。
本文转自 Eallies 51CTO博客,原文链接:http://blog.51cto.com/eallies/79010,如需转载请自行联系原作者
你可能感兴趣的文章
python IDLE操作
查看>>
HttpSession详解
查看>>
Springboot使用junit
查看>>
PHP学习之环境搭建
查看>>
『追捕盗贼 Tarjan算法』
查看>>
第十二周学习总结
查看>>
面试题目
查看>>
struts2执行流程
查看>>
nodejs基础学习
查看>>
【windows8开发】异步编程 之Concurrency::task(C++)
查看>>
杭电1873--看病要排队
查看>>
指针 new delete
查看>>
Xadmin显示视图
查看>>
option菜单个数变化
查看>>
Python 函数(可变参数)
查看>>
FFmpeg中HLS文件解析源码
查看>>
IPMI总结
查看>>
配置OWASP的ModSecurity规则
查看>>
laravel 5.1 单元测试 Cannot modify header information 错误
查看>>
周四作业
查看>>