新视野 新选择——Kevin Lin's Blog
博客园
首页
博问
闪存
新随笔
联系
订阅
管理
随笔- 168 文章- 0 评论- 436
学习O/RM,从最简单的例子开始...之二
点击这里下载现有Demo代码[2007年1月25号版]
学习O/RM,从最简单的例子开始...之一
学习O/RM,从最简单的例子开始...之二
学习O/RM,从最简单的例子开始...之三
学习O/RM,从最简单的例子开始...之四
代码生成工具下载和最新Demo
1
public
static
string
Execute(T obj,
string
cnHint,
string
cmdName)
2
{
3
DateTime start
=
DateTime.Now;
4
MappingStore mapStoreInstance
=
new
MappingStore();
5
MappingInfo map
=
MappingStore.TheInstance.GetMappingInfo(obj.ToString());
6
CommandInfo cmdInfo
=
map.Commands[cmdName];
7
8
using
(DbConnection cn
=
DbConnectionStore.TheInstance.GetConnection(cnHint))
9
{
10
DbCommand cmd
=
DbCommandStore.TheInstance.GetCommand(cnHint, cmdInfo.CommandText);
11
cmd.Connection
=
cn;
12
_setParamValues(obj, cmd, cmdInfo);
13
cmd.ExecuteNonQuery();
14
_getParamValues(obj, cmd, cmdInfo);
15
}
16
TimeSpan duration
=
DateTime.Now
-
start;
17
return
duration.ToString();
18
}
接上篇,我们先来看看以上这段代码(ObjectStore.cs文件中的一个方法)
第5、6行,分别根据传入的当前类的实例名obj和命令参数cmdName,从MappingInfo和CommandInfo中获取信息。实际上,在第5行MappingStore.TheInstance这里,就已经得出了MappingInfo和CommandInfo。
第8行这里,从web.config文件,读取数据库连接字符串,先看看以下代码就知道了:
1
public
class
DbConnectionStore
2
{
3
public
static
DbConnectionStore TheInstance
=
new
DbConnectionStore();
4
5
private
DbConnectionStore()
6
{
7
}
8
9
public
DbConnection GetConnection(
string
cnHint)
10
{
11
ConnectionStringSettings cnSettings
=
DbConnectionStore.TheInstance.GetConnectionStringSettings(cnHint);
12
DbProviderFactory providerFactory
=
DbProviderFactories.GetFactory(cnSettings.ProviderName);
13
DbConnection cn
=
providerFactory.CreateConnection();
14
cn.ConnectionString
=
cnSettings.ConnectionString;
15
cn.Open();
16
17
return
cn;
18
}
19
20
public
ConnectionStringSettings GetConnectionStringSettings(
string
cnHint)
21
{
22
ConnectionStringsSection connectionStringsSection
=
WebConfigurationManager.GetSection(
"
connectionStrings
"
)
as
ConnectionStringsSection;
23
ConnectionStringSettingsCollection connectionStrings
=
connectionStringsSection.ConnectionStrings;
24
ConnectionStringSettings connStringSettings
=
connectionStrings[cnHint];
25
return
connStringSettings;
26
}
27
}
再看看以下config文件部分代码
<
add name
=
"
myDB
"
connectionString
=
"
Data Source=.;Initial Catalog=Test;Integrated Security=True
"
providerName
=
"
System.Data.SqlClient
"
/>
DbConnectionStore类中的参数cnHint就是其中的myDB。
为什么会这么设计呢?为什么不直接读取数据库连接字符串?
很简单,这样可以实现预先设定多个数据库连接。根据传入的cnHint参数不同获取对应的连接字符串。
·另外该好好看看的就是DbCommandStore类了,设计之精妙,很好理解,真是叹服阿!
简单总结一下目前的Demo代码:
·一个就是映射文件的设计,结合了MappingInfo和CommandInfo的设计以及信息提取
·再一个就是DbConnectionStore类和DbCommandStore类的设计。当然,这两个类都可以直接在其他项目中使用,而不需要大的改变。
·对了,原有的Demo中,还有一个MyBuildProvider类,主要是为了读取映射文件用的。对了,差点忘了说,最初的Demo代码中,映射文件的格式是.orm,同时web.config文件中,还有这么一段:
<
compilation debug
=
"
true
"
>
<
buildProviders
>
<
add extension
=
"
.orm
"
type
=
"
Research.MyBuildProvider, CodeGenerator
"
appliesTo
=
"
Code
"
/>
</
buildProviders
>
</
compilation
>
提供下载的Demo中,这一段被我注释掉了。
上面的代码,是为了寻找映射文件。标明后缀名是.orm,可以通过
Research命名空间下的MyBuildProvider类来加载。
后来不知道为什么,编译的时候,VS2005总是提示“无法识别的属性appliesTo,区分大小写”什么的,可是我查了MSDN上都是这么写的。不知道谁知道怎么解决这个问题,好在我直接修改了映射文件的格式为xml文件,通过对xml文件的读取来实现同样的功能。
不过,如果上述问题解决的话,在最初调用的代码(如下)中,就不用传入连接数据库的字符串了。这样是不是更方便和易于维护修改呢?这些功能都是在MyBuildProvider类得以实现。当然,仅仅通过读取xml映射文件,而跳过MyBuildProvider类的使用,我们也可以实现类似的功能,这就是下一步的目标了。
下篇开始,就是我的改造计划了。
1、不要遍历所有的映射文件。如果有很多实体类,全部遍历并加载的话,开销可想而知。
2、分层实现,不用在每个调用的地方传入cnHint——用于识别数据库连接字符串。
3、用Attribute实现。参考别的ORM代码,比如websharp。
4、支持批量操作。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted @ 2007-01-25 13:31
Kevin Lin
阅读(2248)
评论(10)
编辑
收藏
发表评论
1143515
回复
引用
查看
#1楼
2007-01-25 15:27
dudu
写个摘要吧。
回复
引用
查看
#2楼
2007-01-25 17:52
袁永福
才过2000啊,慢慢浮吧.
回复
引用
查看
#3楼
[
楼主
]
2007-01-25 19:45
ColdDog
快了快了,1870多了,哈哈
回复
引用
#4楼
2007-01-25 22:19
在线汉语词典[未注册用户]
不成
回复
引用
查看
#5楼
[
楼主
]
2007-01-26 09:18
ColdDog
前的Demo好像多了一个文件,导致不能运行,现在已经更新,不好意思!:)2007年1月26号上午9时更新
回复
引用
查看
#6楼
[
楼主
]
2007-02-09 16:44
ColdDog
@袁永福
1330多名了,迅速吧,15天时间上升650名,哈哈
回复
引用
查看
#7楼
2007-07-26 00:39
镜涛
感觉像拷代码
回复
引用
查看
#8楼
[
楼主
]
2007-07-26 22:03
ColdDog
@镜涛
多谢支持,很久没更新,最近刚换了工作,初到大公司,感觉自己像新手,很蹩脚,有点手忙脚乱,呵呵~共勉!
回复
引用
#9楼
2008-04-08 23:57
蓝奇高级验证码识别引擎QQ:631753663[未注册用户]
出售蓝奇高级验证码识别引擎,可准确识别新浪动网淘宝CSDN等多种复杂验证码。
输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。独具特色的边缘检测字符分离、旋转倾斜纠正和通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN等多种验证码均有不错的识别率,是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释等相关技术文档。
官方网站 -
http://***/yzm_advocr
识别效果怎么样一试就知道 - DEMO下载
http://***/yzm_advocr
/advocr.rar
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
伊朗封杀Gmail和Facebook等互联网服务
·
分析称专利之争让谷歌苹果两败俱伤
·
Android平台发现新型手机病毒Rootsmart
·
HTC首款Android4.0手机大曝光
·
这是不是你期待的 iPad 3?
»
更多新闻...
最新知识库文章
:
·
高级编程语言的发展历程
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
公告
我复出了,敬请关注!
昵称:
Kevin Lin
园龄:
6年9个月
粉丝:
4
关注:
2
搜索
随笔分类
(206)
.Net(C#)(57)
(rss)
Asp.net(44)
(rss)
Asp.net mvc(5)
(rss)
Java(3)
(rss)
ORM(9)
(rss)
SilverLight
(rss)
SQL Server(7)
(rss)
Win Forms(7)
(rss)
windows编程(4)
(rss)
WPF/WCF(2)
(rss)
翻译
(rss)
技术外围(24)
(rss)
每月收藏(14)
(rss)
其他技术(10)
(rss)
设计模式(1)
(rss)
原创作品(19)
(rss)
随笔档案
(168)
2010年2月 (1)
2009年10月 (1)
2009年3月 (2)
2008年12月 (1)
2008年9月 (2)
2008年7月 (1)
2008年6月 (2)
2008年5月 (2)
2008年4月 (3)
2007年12月 (2)
2007年11月 (1)
2007年10月 (3)
2007年9月 (2)
2007年8月 (2)
2007年7月 (4)
2007年6月 (5)
2007年5月 (3)
2007年4月 (23)
2007年3月 (8)
2007年2月 (5)
2007年1月 (21)
2006年12月 (17)
2006年11月 (16)
2006年10月 (7)
2006年9月 (25)
2006年8月 (8)
2005年6月 (1)
相册
My photos
几个链接
C# Open Source
(rss)
My Space
一亩三分地
积分与排名
积分 - 154387
排名 - 601
最新评论
阅读排行榜
评论排行榜
推荐排行榜