2、学习Codesmith 之 petshop 实体层

 个人觉得学习 codesmith 需要一点基础:

     需要懂一点ASP.Net 会写三层架构 对程序员枯燥的生活有一定认识

     而PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,有很多可以借鉴之处。为了简化文章 我们只会 Model ,  IDAL , SQLServerDAL , DALFactory , Bll ,Web 进行生成

     研究petshop有一段时间啦 网上它关于的文章也不记其数

 

我们先了解一下petshop4.0:

 

下载地址: http://download.microsoft.com/download/8/0/1/801ff297-aea6-46b9-8e11-810df5df1032/Microsoft%20.NET%20Pet%20Shop%204.0.msi

 

petshop系统架构设计:http://www.cnblogs.com/wayfarer/archive/2007/03/23/375382.html 

 

     数据实体对应数据库中相应的数据表。它们没有行为,仅用于表现对象的数据。这些实体类都被放到Model程序集中,例如数据表Products对应的实体类ProductInfo,这些对象并不具有持久化的功能,简单地说,它们是作为数据的载体,便于业务逻辑针对相应数据表进行读/写操作。虽然这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,但这些实体类却并不具备对应的数据库访问能力。

 

让我们共同学习petshop  实体层 的生成

我们需要得到的是什么? 需要定义一个什么样的模板

首先例出你所想的目标程序(以ProductInfo为例) 找出目标程序的可变量

 

PetShop.Model

 

可以看出在不同项目中的不同 Model 会有不同命名空间,不同的类名,不同的字段 属性 方法

命名空间需要定义一个属性 而类 字段 属性 方法 需要从数据库中获得 需要定义一个数据库访问属性

 

这回,我们开始探讨CodeSmith与数据库的联系,在CodeSmith中自带一个程序集SchemaExplorer.dll,这个程序集中的类主要用于获取数据库中各种对象的结构。

 因为是针对表去生成属性,则首先要定义一些变量,然后指明这些变量类型为数据库中的表,这样我们可以通过这个数据表类型的变量得到相应的表的信息。
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context"  Description="Table that the stored procedures should be based on." %>

     如果想访问视图的话,则将变量类型Type中的SchemaExplorer.TableSchema修改为SchemaExplorer.ViewSchema即可。

详细请见: CodesmithAPI help 中的 SchemaExplorer

 

模板代码: 写一个模板不是为了生成一个类(ProductInfo) 而是多个相似的类 我们可以通 Properties 设置对应的值 设置类对应的不同的数据库对象

 

Code

 

哎。。。   奇怪 怎么引入了 MAP

因为我们需要把系统类型转为C#类型 我在模板中使用了<%= CSharpAlias[column.SystemType.FullName] %>

把鼠标指针移到 CSharpAlias 就可以看到它的上级 通过API去了解它的详细介绍和它上级的详细介绍

                                                                      Author:Nadim

                                                                     2008-8-23 13:37:28

你可能感兴趣的:(code)