从这里出发,力争做一位新手中的高手....——lxinxuan's Blog
posts - 164, comments - 376, trackbacks - 22, articles - 0
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
学习O/RM,从最简单的例子开始...之二
Posted on 2007-01-25 13:31
ColdDog
阅读(1891)
评论(10)
编辑
收藏
所属分类:
ORM
点击这里下载现有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、支持批量操作。
Feedback
#1楼
回复
引用
查看
2007-01-25 15:27 by
dudu
写个摘要吧。
#2楼
回复
引用
查看
2007-01-25 17:52 by
袁永福
才过2000啊,慢慢浮吧.
#3楼
[
楼主
]
回复
引用
查看
2007-01-25 19:45 by
ColdDog
快了快了,1870多了,哈哈
#4楼
回复
引用
2007-01-25 22:19 by
在线汉语词典 [未注册用户]
不成
#5楼
[
楼主
]
回复
引用
查看
2007-01-26 09:18 by
ColdDog
前的Demo好像多了一个文件,导致不能运行,现在已经更新,不好意思!:)2007年1月26号上午9时更新
#6楼
[
楼主
]
回复
引用
查看
2007-02-09 16:44 by
ColdDog
@袁永福
1330多名了,迅速吧,15天时间上升650名,哈哈
#7楼
回复
引用
查看
2007-07-26 00:39 by
镜涛
感觉像拷代码
#8楼
[
楼主
]
回复
引用
查看
2007-07-26 22:03 by
ColdDog
@镜涛
多谢支持,很久没更新,最近刚换了工作,初到大公司,感觉自己像新手,很蹩脚,有点手忙脚乱,呵呵~共勉!
#9楼
回复
引用
2008-04-08 23:57 by
蓝奇高级验证码识别引擎QQ:631753663 [未注册用户]
出售蓝奇高级验证码识别引擎,可准确识别新浪动网淘宝CSDN等多种复杂验证码。
输出为一个标准DLL,可供VB,VC,Delphi,C#.NET,VB.NET,模拟精灵,按键精灵等多平台调用,调用方法简单,几行代码即可完成。独具特色的边缘检测字符分离、旋转倾斜纠正和通用字符匹配算法(无论字体和大小), 使得该引擎对于像新浪、动网、淘宝、CSDN等多种验证码均有不错的识别率,是一款效果较为理想的验证码识别引擎。附详细的调用实例和代码注释等相关技术文档。
官方网站 -
http://***/yzm_advocr
识别效果怎么样一试就知道 - DEMO下载
http://***/yzm_advocr
/advocr.rar
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-03-05 14:15 编辑过
另存
打印
所属分类的其他文章:
·
Simple NHibernate Architecture[from]
·
学习O/RM,从最简单的例子开始...之四
·
学习O/RM,从最简单的例子开始...之三
·
学习O/RM,从最简单的例子开始...之二
·
学习O/RM,从最简单的例子开始...之一
·
关于ORM的一些外文资料
·
What are the ORM tools available for .NET in the market currently?
·
Websharp.ORM 2.0实现原理[转]
·
O/R Mapping实际开发经验之谈(转)
最新IT新闻:
·
微软推新型搜索技术"BrowseRank"挑战谷歌
·
2008年7月26日IT博客精选
·
微软每年向Apache捐10万美元支持开源软件
·
AOL将关闭3个网站以降低成本 集中发力广告
·
谷歌网页索引数量突破1万亿个
博客园新闻频道
博客园首页
社区
Powered by:
博客园
Copyright © ColdDog
公告
本Blog大量文章都是转载,有些文章后面没有加上“[转]”的字样,如果存在侵权,请告知本人!
站内搜索
我的最新闪存
今天休息,开心~
7-11 14:04
与我互动
给我发短消息
留言簿
(2)
给我留言
查看私人留言
我参加的小组
博客园发展小组
Web技术联盟
随笔分类
(198)
.Net(C#)(57)
Asp.net(42)
Asp.net mvc(4)
Java(3)
ORM(9)
SilverLight
SQL Server(7)
Win Forms(7)
windows编程(4)
WPF/WCF(2)
翻译
技术外围(23)
每月收藏(11)
其他技术(10)
设计模式(1)
原创作品(18)
随笔档案
(161)
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
收藏夹
(241)
Asp.net MVC(19)
Debug|Trace(1)
SilverLight(9)
Sql Server(10)
xml(5)
参考收藏(140)
来不及(10)
模型设计(27)
组件控件(20)
几个链接
C# Open Source
My Space
积分与排名
积分 - 99601
排名 - 369
最新随笔
1. [摘自千寻网]给鼠标右键增加“见好就收”的功能
2. ASP.NET 2.0中的URL映射
3. 在.net中使用Gmail发送邮件
4. [绝对原创]从VS2003(.net1.1)升级到vs2005(.net2.0)全程跟踪记录
5. 使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之三
6. 使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之二
7. 2008年4月-5月
8. 使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之一
9. XNA Game Studio 2.0 Released版 发布了,好像是前几天的事,但园子里似乎没有讯息嘛
10. 向大家推荐一个不错的休闲游戏
11. VS2003(.net framework1.1)中,如果让日历控件的“星期”去掉?
12. 农历js脚本
13. WEB开发碰到的问题及经验十八则
14. 根据分辨率不同调用不同的css文件
15. 2007年9-11月
16. 学习O/RM,从最简单的例子开始...之四(2)
17. (有兴趣的朋友进来看看)一道智力编程题
18. [转]关于SilverLight:你需要知道的十件事情
19. 如何加密ASP.NET配置数据[]
20. [转]如何处理ASP.NET 2.0配置文件
最新评论
1. re: 使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之二
@冰儿
是需要一个桌面工具,可以上传下载文件的?
--ColdDog
2. re: 2008年4月-5月
...
--开放api
3. re: 使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之二
文件上传下载的功能可以生成.exe的桌面程序吗? 怎么实现阿 ?? 你有现成的.exe 文件吗〉??? 请您看到后尽快和我联系。 谢谢~~~...
--冰儿
4. re: 2008年4月-5月
Log4net配置例子: <log4net> <appender name="DebugLog" type="log4net.Appende...
--log4net
5. re: asp.net导出Excel文件之方法比较
我是按“Response.Clear(); Response.Buffer = true; Response.Charset = "gb2312"; ”导出Excel的,...
--时间太快
阅读排行榜
1. [翻译]你或许还未听说过的一些ASP.NET 2.0要诀(4458)
2. WebService中使用自定义类的解决方法(5种)(4171)
3. [原创]老生常谈,回顾并整理一下DataGrid分页控件(3003)
4. 学习O/RM,从最简单的例子开始...之四(2671)
5. asp.net导出Excel文件之方法比较 (2559)
评论排行榜
1. 2007年9-11月(34)
2. 使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之二(34)
3. [翻译]你或许还未听说过的一些ASP.NET 2.0要诀(26)
4. WebService中使用自定义类的解决方法(5种)(21)
5. [原创]老生常谈,回顾并整理一下DataGrid分页控件(18)