转自:http://www.cnblogs.com/leitwolf/archive/2007/07/27/833255.html

http://blog.csdn.net/happyhippy/article/details/1105875

http://baike.baidu.com/link?url=-CbEabTswlJfVGssgYmHfz3kd6ui2RfU1kUe02e5V_54LvXqzu5sxrgUOV7A0v9qol6JQPM9GlNzQJ_8GTjOCa

分类: ORM2006-08-22 16:04 6666人阅读 评论(4) 收藏 举报

MyGenertion是一款不错的代码生成ORM代码生成工具,下面是我学习过程中的一些笔记(总结了一下dOOdads C# Quick Reference文档,还有自己在使用和调试过程中遇到的问题及自己的解决方法),贴出来与大家共享 。

这篇文章主要讲解怎样用MyGeneration(我用的MyGeneration的版本号是1.5.1)的dOOdad模板(使用其自带的模版)来生成代码,及将这些代码加入到项目中。

1.   准备工作: 数据库设计(MS Sql Server):
   1). 为每张表设置一个identity列作为主键。也可以用GUID或多列作为主键。
   2). 为每张表增加列名为“RowVersion”的列,数据类型设为时间戳(timestamp)。dOOdad将用这列处理并发。
   3). dOOdad只能处理单张表,不能处理多表联合查询。要处理多张表,可以创建视图,用操作试图替换多表问题。
   4). 在设计数据库和应用程序时,尽可能少地使用null。

2.  安装MyGeneration,添加dOOdad项目到解决方案:
   1). 从http://www.mygenerationsoftware.com下载并安装。

2). 安装完成后,dOOdad项目位于../MyGeneration/Architectures/dOOdad/CSharp/MyGeneration.dOOdad/目录下,有两个版本,2003和2005,根据你的需求,选择一个添加到解决方案中。另外,目录下有个readme.txt文件,也将了一些dOOdas的使用步骤和说明。
       当然,我们也可以直接打开该项目,编译生成dll文件,然后在应用程序中添加该程序集引用;但该项目的代码还存在一些问题,可能要在调试的时候才能发现,这时再修改代码添加引用就很不方便,所以个人不推荐这样做。
在DbAdapters文件夹下,默认所有的文件的生成操作属性都是"无",即不编译进项目。分别选择应用程序的数据库所对应的两个*Entity.cs和*DynamicQuery.cs两个文件,将他们的属性--生成操作改为"编译",这样就可以编译进生成的Assembly中。
MyGeneration支持的数据库对应的文件:
   SQL Server (SqlClientDynamicQuery.cs, SqlClientEntity.cs)                System.Data.SqlClient
   Access        (OleDbDynamicQuery.cs, OleDbEntity.cs)                          System.Data.OleDb
   Oracle          (OracleClientDynamicQuery.cs, OracleClientEntity.cs)   System.Data.OracleClient
   PostgreSql  (PostgreSqlDynamicQuery.cs, PostgreSqlEntity.cs)       Npgsql   
   Firebird        (FirebirdSqlDynamicQuery.cs, FirebirdSqlEntity.cs)        FirebirdSql.Data.Firebird
   VistaDB       (VistaDBDynamicQuery.cs, VistaDBEntity.cs)                   VistaDB
   SQLite         (SQLiteDynamicQuery.cs, SQLiteEntity.cs)                        Finisar.SQLite
   MySQL         (MySQL4DynamicQuery.cs, MySQL4Entity.cs)                  MySql.Data.MySqlClient
  3). 现在就可以编译了。

3.  其他需要访问该Assembly的项目:
   1). 为项目添加引用--项目--MyGeneration.dOOdad
   2). 为项目添加两个文件夹:
       DAL(数据访问层):用于存放MyGeneration创建的Abstract类(下面会讲如何使用MyGeneration来生成这些类)。
       BLL(业务逻辑层): 用于存继承上面的Abstract类的具体类,可由MyGeneration自动生成。

4.  使用MyGeneration:
  4.1 生成CRUD存储过程:
      1) 运行MyGeneration,Edit--DefaultSetting,设置数据库、编程语言等。
      2) 点击工具栏-Template Browser,选择要创建的存储过程的模板
          可用的模版有:
           Microsoft SQL      - Microsoft SQL Server.dOOdad Stored Procedures
           Microsoft Access   - Microsoft Access.Access Stored Procedures
           Oracle             - Oracle.Oracle Stored Procedures
           PostgreSQL         - PostgreSQL.PostgreSQL Stored Procedures
           Firebird           - Firebird.StoredProcedures.Firebird Stored Procedures
      3) 运行模版,选择数据库和表(一般选则所有表),单击确定后,会在OutPut中输出存储过程
      4) 将生成的存储过程拷贝到查询分析器中,然后执行向数据库中写入存储过程。

4.2 为数据库中的表生成DAL Abstract类:
      同上,选择Template Browser--dOOdad--C#(其他的与此类似)--dOOdad Business Entity--执行模版--选择上面创建的DAL文件夹,设置要生成的类的命名空间和数据库,选择所有表,然后生成Abstract类。

4.3 为数据库中的视图生成具体类:
      选择dOOdad Business View模版,并将生成的类保存在BLL文件夹,其他同上。

4.4 生成具体类(也可以自己写):
      选择dOOdad Concrete Class模版,其他同上。

5.   Visual Studio中使用上面生成的资源:
    1) 在配置文件web.config或app.config配置连接字符串。dOOdad项目中默认的key是"dbConnection",也可以修改BusinessEntity类中的_defaultConfig字段的值来修改key的默认值。
      另外,dOOdad项目有个问题就是连接字符串并没有初始化(可能是模版的bug),代码如下:

internal string _raw = "";
virtual public string ConnectionString
{
    get
    {
     return _raw;
    }
   set
   {
    _raw = value;
   }
}

虽然可以在应用程序中手动给属性ConnectionString赋值,但这样的话,每个业务实体在new完之后,都要给ConnectionString赋值,比较繁琐不好维护;一个比较好的办法就是在BusinessEntity的构造函数中对_raw进行初始化(自己写代码)。我用的是VS2005,可以用VS2005自动生成配置文件和配置文件的读取类Settings,然后初始化连接字符串,例如:internal string _raw = ProjectName.Properties.Settings.Default.ConnectionString;

2)  可以在上面生成的具体类(Concrete Class)中添加应用程序自己的业务逻辑,可处理自定义存储过程和SQL语句等。

 

myGeneration代码生成器的更多相关文章

  1. [NHibernate]代码生成器的使用

    目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例 ...

  2. [NHibernate]存储过程的使用(二)

    目录 写在前面 文档与系列文章 创建对象 更新对象 总结 写在前面 上篇文章介绍了如何使用MyGeneration代码生成器生成存储过程,以及nhibernate中通过存储过程删除数据的内容,这篇文章 ...

  3. 【转】20个Java 代码生成器

    From: http://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html 1.1 CodeSmith 一款人气很旺国外的基于模板的dotne ...

  4. springmvc SSM shiro redis 后台框架 多数据源 代码生成器

    A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单 下载地址    ; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类 ...

  5. 分享一个与ABP配套使用的代码生成器源码

    点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...

  6. ABP配套代码生成器(ABP Code Generator)帮助文档,实现快速开发

    ABP代码生成器介绍 针对abp这个框架做了一个代码生成器,功能强大.分为两大功能点,一个是数据层,一个是视图层. 数据服务层:通过它,可以实现表设计.领域层初始化.多语言.automapper自动注 ...

  7. 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  8. Razor Engine,实现代码生成器的又一件利器

    Razor Engine,之前仅仅是ASP.NET MVC的一种View引擎,目前已经完全成为一种可以独立使用的模版引擎,并且已经成为了CodePlex上一个开源的项目(http://razoreng ...

  9. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 更优美的Oracle数据库上的代码生成器

    代码生成器进行了改进,针对Oracle数据库生成更优美的代码.这样生成出来的代码,更像微软的风格,更像C#.NET的标准规范,阅读起来也更优美.把Oracle表字段名默认大写, 有_分割等进行了优化, ...

随机推荐

  1. 配置IIS服务器,APK文件下载

    解决方法:在IIS的MIME类型中添加扩展名.apk,MIME类型application/vnd.android即可

  2. fancybox 在打开窗口前 先执行 js脚本,fancybox设置只能通过右上角关闭,fancybox遮罩层关闭

    在默认情况下,fancybox点击之后弹出窗口,右上角带有一个XX,但是点击窗口的其他遮罩层或者是其他地方,都是可以关闭fancybox的,有些时候,我们不希望这样关闭,而是只能点击右上角关闭,那么设 ...

  3. 简单分析什么是SQL注入漏洞

    现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的.但是事实是这样吗?我们学这些,不仅要知其然,更要知其所以然! ...

  4. hdu 5310 Souvenir (水)

    题意:今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有m个纪念品.今天总共有n个参 ...

  5. apache开源项目--Syncope

    Apache Syncope is an Open Source system for managing digital identities in enterprise environments, ...

  6. 常见MyEclipse报错—— serialVersionUID的作用

    先挖好坑 http://swiftlet.net/archives/1268

  7. 【转】NSDictionary以及NSMutableDictionary的用法

    原文网址:http://my.oschina.net/u/1245365/blog/177736 摘要 Foundation中的字典是由 键—值 对组成的数据集合.通过key(键),查找对应的valu ...

  8. JS动态呈现还可以输入字数

    现在觉得当我们使用js或者jquery来呈现一个动态效果时,主要还是要想清楚它的思想.它的原理.而动态呈现输入字数,其实就是给它设置一个最大输入字数,然后获取已输入的字数,自然想做什么都可以. < ...

  9. 开源Jabber(XMPP) IM服务器介绍

    一.摘要 这是我粗略读了一遍Jabber协议和相关技术文章后的产物,有些地方不一定准确.在文章中引用的一些代码来自www.jabber.org上的文章. 二. 什么是Jabber    Jabber就 ...

  10. hdu 3938 Portal(并查集+离线+kruskal)2011 Multi-University Training Contest 10

    搜了题解才把题搞明白.明白之后发现其实题意很清晰,解题思路也很清晰,只是题目表述的很不清晰…… 大意如下—— 给你一个无向图,图中任意两点的距离是两点间所有路径上的某一条边,这条边需要满足两个条件:1 ...