惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
B
Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
D
DataBreaches.Net
B
Blog RSS Feed
小众软件
小众软件
人人都是产品经理
人人都是产品经理
I
InfoQ
P
Proofpoint News Feed
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - Lupin

百度低调发布搜索开放平台 - Lupin - 博客园 让AtlasToolkit中的CacadingDropDown支持多选 - Lupin - 博客园 Temporary Post Used For Style Detection (03e3e7c9-84e1-41db-a5b1-12251cf335f0) 个人求职简历(.Net)--求广州暑期实习 Google Toolbar4 让Google Analytics认识Baidu 微软的工程师也太神奇了! 我也被“玩儿死了” - Lupin - 博客园 在.Net中使用资源文件 NHibernate的Codesmith模板的几个Bug dasBlog的模板引擎(二)----内部实现 dasBlog的模板引擎(一)-----概念解释 const的作用 GooglePK,一个无聊又有趣的小工具 - Lupin - 博客园 购买域名和服务器的过程 再次测试Crossport 最简单的int数组 Python的数据类型 - Lupin - 博客园 关于“undefined reference to”错误
ActionPack解读
Lupin · 2006-08-26 · via 博客园 - Lupin

tags: Asp.Net, ActionPack, Database, 数据库, CodeGeneration

  昨天才知道有ActionPack这个东西,据介绍说很多概念是从Ruby On Rails来的,但我对Ruby On Rails没有了解,所以也不知道是怎样,但我知道ActionPack真是是相当强的东西,即使它现在还不是足够的强大,但是经过发展,必然大有作为.

  闲话少说,到底ActionPack是个什么东西呢.说白了,它就是一个代码生成器,帮你生成访问数据库的代码. 但跟一般的代码生成器又有不同,ActionPack生成的代码并不存储在文件系统中,而是直接被编译在内存中,连Dll文件都没有.

  它是怎么做到这些的呢?

  最核心的就是BuildProvider了,它使用了Framework中的BuildProvider,在在生成的时候动态编译代码.这被编译的这些代码就是根据数据库中的表来生成的.而要让它做到这些,你只需要在配置文件中配置数据库连接字符串就可以了.

  以上是感性的认识,接下来看看它的结构.

  首先是一个BuildProvider,它继承自System.Web.Compilation.BuilderProvider,只要在Web.Config文件中配置,就可以让它在生成的时候直接运行里面的GenerateCode方法,跟HttpHandler有点类似.这是触发点.

  然后是CodeGeneration,看名字就明白了,它用来生成代码.

  然后是SchemaService,这个是用来读取数据库中的表信息的

  TableSchema,存放表信息,在进行代码生成的时候使用到.

  上面这几个,是ActionPack实现机制的主要部分.接下来的是一些配置和数据库访问的东西

  ActionPackConfig,ActionPackConfigurationSetting,这两个是读取配置文件的,比较简单.

  DBHelper和Query这两个是数据库操作的

  ActiveList,ActiveRecord,这两上是Entry的模板类.在这里封装DBHelper和Query中的操作,使用这两个模板类,使生成的代码变得十分简单.否则,生成代码的工作将变得十分繁琐.

ActionPack的结构就这样了,有空再继续深入剖析.