我的ORM索引

数据库连接字符串格式

<add name="dbo" connectionString="" providerName="MySql.5" />

生成数据库实体,要求数据库完整定义到一个库中。 在App.config 中配置为 dbo 项。

providerName中分为两部分:数据库和版本号。

数据库定义枚举:

public enum DatabaseEnum
{
/// <summary>
/// 指 SqlServer 2005,2008
/// </summary>
SqlServer = 1,
Excel,
MsAccess,
Oracle,
MySql,
Sqlite,
PostgreSql,
DB2,
Other,
}

目前并不是全部支持。仅支持: Sqlserver 2005+,MySql5+

配置文件

MyOql生成器需要一个配置文件,形如:

<MyOqlCodeGen>
<Table db="dbo" Owner="dbo">
<Group Name="PlatForm">
<Entity Name="P_CarBrand" Enums="" PKs="ID" AutoIncreKey="ID" FKs="(Logo)()=S_SysAnnex:(ID)" />
<Entity Name="P_CarFactory" Enums="" PKs="ID" AutoIncreKey="ID" FKs="(BrandID)()=P_CarBrand:(ID)" />
<Entity Name="P_CarType" Enums="Level=CarLevelEnum" PKs="ID" AutoIncreKey="ID" FKs="(BrandID)()=P_CarBrand:(ID);(FactoryID)()=P_CarFactory:(ID)" />
<Entity Name="P_CarInfo" Enums="Status=CarMarketStatusEnum;Source=CarSourceEnum" PKs="ID" AutoIncreKey="ID" FKs="(TypeID)()=P_CarType:(ID)" />
</Group>
</Table>
<View db="dbo" Owner="dbo">
<Group Name="View">
<Entity Name="VTxtRes" Enums="Lang=LangEnum" PKs="Lang,ResID" MyTable="S_ResKey,S_ResValue" />
</Group>
</View>
<Proc Owner="dbo" db="dbo">
<Group Name="">
<Entity Name="P_Login" Return="result=PUserRule.Entity:out" MyTable="P_LoginUser" />
</Group>
</Proc>
<Function Owner="dbo" db="dbo">
<Group>
<Entity Name="Split" TypeMap="Value=String" Paras="val=String:in,split=String:in" />
</Group>
</Function>
</MyOqlCodeGen>

对于复杂项目,手写这个Xml非常麻烦。我写了一个工具,使用 MyTool 我们就不需要操作这个大文件了。

http://code.taobao.org/svn/MyMvcApp/MyTool/

该项目的配置文件被分解在 MyOqlCodeGen 文件夹中

MyTool生成实体

命令行:生成实体代码.bat

@echo off
setlocal
set curDisk=%~d0
set curPath=%~dp0 %curDisk%
cd %curPath% call MyOqlCodeGen\合并MyOqlCodeGen.bat
bin\debug\MyTool -CodeGen -ToPath "..\DbEnt\Entity" -Log "R:\CodeGen.log" -Namespace DbEnt -CodeHeader MyOqlCodeGen\CodeHeader.txt -ReadmeFile MyOqlCodeGen\ReadMe.txt notepad "R:\CodeGen.log"
endlocal
rem call 语音完成.js
pause;

配置文件结构

代码生成器的配置文件结构分为四部分:

1. Txt文件,它是静态文件,可以看做常量,不必修改。

2. Init文件,初始化文件,是可以通过程序或脚从数据库中自动生成的。

3. Config文件,我们需要手动修改的配置。重点。

4. Xml文件,是临时生成的文件,不必签入到SVN。

在Init文件和 Config文件类型中,分别有四个类型:

1. Table

2. View

3. Procedure

4. Function (表值函数)

数据库

生成器是基于 Sqlserver2008+进行的。

1. 向 Sqlserver2008+中注入程序集 MyClr: 运行 MyOql\MyClr\注册程序集.sql ,需要修改一下 MyClr.dll 程序集的地址。

2. 创建生成实体的存储过程: 运行 MyOql\MyClr\创建Dev_Ent.sql

完成。

在Sqlserver中执行:

1. Dev_Ent 生成 MyOqlCodeGen_Auto_Table.init 内容。

2. Dev_Function 生成  MyOqlCodeGen_Auto_Func.init 内容。

3. Dev_Proc 生成 MyOqlCodeGen_Auto_Proc.init 内容。

4. Dev_CheckFk 用来检查数据规范,1 是所有自增表生成添加ID为0的SQL。ID为0的记录表示空。 2是生成外键不为空的SQL。

5. View的自动生成器没有写。

操作步骤

1. 设置表

2. 设置MyTool的App.config 中 dbo的 数据库连接字符串

3. 在DbEnt项目的 EntEnum文件夹中建立表的枚举。(每个表一个文件。)

4. 数据库中执行: Dev_Ent -》 MyOqlCodeGen_Auto_Table.init

5. 数据库中执行: Dev_Function -》 MyOqlCodeGen_Auto_Func.init

6. 数据库中执行: Dev_Proc -》 MyOqlCodeGen_Auto_Proc.init

7. 手写 MyOqlCodeGen_Auto_View.init

8. 编辑 MyOqlCodeGen_My_Table.config

9. 编辑 MyOqlCodeGen_My_Func.config

9. 编辑 MyOqlCodeGen_My_Proc.config

10. 编辑 MyOqlCodeGen_My_View.config

11. 执行 生成实体代码.bat

编辑格式

所有对象都可以分组,这也是MyOql的一个重要思想。组名可以为空,空组的实体,会附加到 dbr 对象上。

表对象的配置的内容有:数据组,枚举项,BitSummarys,IdName,db,Owner 。

枚举项配置格式:  列名=枚举;列名2=枚举2;...

BitSummarys格式: 列名=是,否;列名2=启用;禁用;...

IdName 表示该实体的名称列,默认为Name,如果不是Name,则需要指定,代码生成器将生成  Get{实体名称}By{ID键} 的方法, 格式: 列=名称

db指定连接的数据库, 对于代码生成器来说,应该都在同一个数据库上进行设计,所以这个可统一使用 dbo

Owner表示所有者,即表名的前缀,一般来说只有一个数据方案,即 dbo (对MySql来说,该值无效)

运行环境

生成实体之后,需要把生成的实体部署到Web环境中,过程:

1. 在 DbEnt 中添加生成的实体文件(可能需要显示隐藏文件)

2. 项目需要的Dll: MyCmn.dll , MyJson.dll, FastReflectionLib.dll , MyOql.EventConfig.dll , (MyOql.MySql.dll,MySql.Data.dll) ,这些Dll 都在 MyOql\lib4\ 下面。

3. Web项目,添加 web.config:

<configuration>
<configSections>
<section name="MyOql" type="MyOql.MyOqlConfigSect,MyOql" />
</configSections>
<MyOql configSource="MyOql.config" />
<connectionStrings>
<add name="dbo" connectionString="Server=192.168.16.23;Database=CvApp_Db;Uid=root;Pwd=1234;" providerName="MySql.5" />
</connectionStrings>
</configuration>

MyOql.config文件内容:

<?xml version="1.0"?>

<MyOql>
<Entitys db="dbo" CacheType="Local" CacheTime="0" CacheSqlTime="0" MaxCacheTime="43200" OraclePKG="PKG" Owner="dbo" >
<Group Name="主库">
</Group>
<Group Name="本地缓存" CacheSqlTime="3600" CacheTime="3600" >
<Entity Name="S_Menu" UsePower="=" />
</Group>
</Entitys>
<DbProviders>
<Provider Name="SqlServer" Type="MyOql.Provider.SqlServer,MyOql"/>
<Provider Name="MySql" Type="MyOql.Provider.MySql_Translater,MyOql.MySql"/>
<Provider Name="Oracle" Type="MyOql.Provider.Oracle,MyOql.OracleProvider"/>
</DbProviders>
</MyOql>

Global.asax:

        protected void Application_Start()
{
dbo.Event = MyOqlEvent.GetInstance();
}

我的ORM之九 -- 生成器的更多相关文章

  1. 我的ORM汇总

    MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...

  2. Python知识目录

    目录 一.计算机基础 二.Python基础 三.函数 四.常用模块 五.模块和包 六.面向对象 七.网络编程socket 八.数据库 九.前端 十.Python Web框架 十一.版本控制--GIT ...

  3. Python学习笔记四

    一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...

  4. python3 基础三

    一.if语句 if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3 ...

  5. 第十九章 Django的ORM映射机制

    第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...

  6. JDBC与ORM发展与联系 JDBC简介(九)

    概念回顾 回顾下JDBC的概念: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它 ...

  7. LLBLGen Pro ORM 生成器

    LLBLGen Pro  ORM 生成器:         http://www.llblgen.com/default.aspx 支持多种 框架,多种数据库.

  8. Python高手之路【九】python基础之迭代器与生成器

    迭代器与生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...

  9. python(九)迭代器和生成器

    一.迭代 迭代就是逐个并且单向访问容器 (这里的容器暂时指数据类型,比如list和dict) 中的元素的行为.举个例子:将一个长度为五的数组逐个从头到尾(即单向)打印的方式称之为迭代.如下图. > ...

随机推荐

  1. 让padding、border等不占据宽度

    box-sizing:border-box; -moz-box-sizing:border-box; /* Firefox */ -webkit-box-sizing:border-box; /* S ...

  2. (转)Android消息处理机制(Handler、Looper、MessageQueue与Message)

    转自 http://www.cnblogs.com/angeldevil/p/3340644.html Android消息处理机制(Handler.Looper.MessageQueue与Messag ...

  3. ORACLE存储过程创建失败,如何查看其原因

    工作中用SQL Server比较多,Oracle可以说是小白,最近想用存储过程来完成单据复制的功能,结果遇到各种问题,其实都是非常简单的问题,但是对我来说还是花了很多时间来解决,浪费这些时间非常不值得 ...

  4. H5学习系列之Communication API

    1 .postMessage API 首先介绍一下什么是iframe? 百度百科里这样写道:IFRAME,HTML标签,作用是文档中的文档,或者浮动的框架(FRAME). 我的理解就是网页中的网页. ...

  5. My安卓知识2--使用listview绑定sqlite中的数据

    我想在我的安卓项目中实现一个这样的功能,读取sqlite数据库中的数据并显示到某个页面的listview控件中. 首先,我建立了一个Service类,来实现对数据库的各种操作,然后在这个类中添加对数据 ...

  6. 使用 hexdump dump 文件内容

    名词解释 [dump] dump 是指把文件的内容,每个字节用2位十六进制数来表示的方式. 缘由 最近看矢泽久雄的<How Program Works>,了解到 dump “exe文件”( ...

  7. 第一课1、ROS

    ---恢复内容开始--- 1.什么是ROS ROS起源于2007年,斯坦福大学的人工智能实验室与机器人技术公司Willow Garage针对其个人机器人项目开发了ROS的雏形. ROS大致每年发布一个 ...

  8. iOS Xcode添加ios10.0的路径

    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

  9. jsp jsp指令

    JSP 由HTML和java语句拼接而成的文本,后缀名为.jsp 1.Jsp翻译成servlet:先翻译,Tomcat将翻译后的文件放置在安装目录下(所有JSP页面本质上就是Servlet程序) 2. ...

  10. prism4 StockTrader RI 项目分析一些体会

    StockTrader RI 代码分析也有一段时间了 刚从codeplex获取到源代码的时候,看得一头雾水,不知所云(因为之前没做过wpf的项目,看文档也静不下那心来看) 后来就想了个笨办法,模拟项目 ...