NHibernate之旅系列文章导航

NHibernate之旅系列文章导航

宣传语

NHibernate、NHibernate教程、NHibernate入门、NHibernate下载、NHibernate教程中文版、NHibernate实例、NHibernate2.0、NHibernate2.0教程、NHibernate之旅、NHibernate工具

招聘:NHibernate、WPF软件开发工程师

导游

NHibernate是把Java的Hibernate核心部分移植到Microsoft .NET Framework上。它是一个对象关系映射工具,其目标是把.NET对象持久化到关系数据库。

NHibernate在2008年8月31日发布了NHibernate2.0版本,代表NHibernate又向前走了一步,我相信NHibernate将会越来越强大。唯一的遗憾是现在NHibernate对泛型的支持有点不足,源于Java中的泛型是编译时“搽拭法” 泛型不是真正的泛型,如果NHibernate添加上自己独特的功能——泛型,那么更为强大了很多。

这个NHibernate之旅系列带你来到NHibernate的世界。一步一步看清NHibernate中的种种细节。

环境优先

这次NHibernate2.0系列之旅使用Microsoft Visual Studio 2008 SP1、SQL Server 2008 Express、NHibernate2.0最新环境,非常舒适。不过你可以到这里获得NHibernate最新版本, 这里获得NHibernate Contrib最新版本。

休息接待区

欢迎加入NHibernate中文社区!在讨论中寻找乐趣!在问题中寻找答案!

请转向:http://space.cnblogs.com/group/NHibernate!全程接待!期待你的NHibernate中文社区之旅!

旅途站点路线

第一站:鸟瞰NHibernate

NHibernate之旅(1):开篇有益

第二站:接触NHibernate

NHibernate之旅(2):第一个NHibernate程序

第三站:数据在我手中

NHibernate之旅(3):探索查询之NHibernate查询语言(HQL)

NHibernate之旅(4):探索查询之条件查询(Criteria Query)

NHibernate之旅(5):探索Insert, Update, Delete操作

第四站:控制你的全部

NHibernate之旅(6):探索NHibernate中的事务

NHibernate之旅(7):初探NHibernate中的并发控制

观光站:实用技巧补偿

NHibernate之旅(8):巧用组件之依赖对象

第五站:关系如此复杂

NHibernate之旅(9):探索父子关系(一对多关系)

NHibernate之旅(10):探索父子(一对多)关联查询

NHibernate之旅(11):探索多对多关系及其关联查询

第六站:我来加载你

NHibernate之旅(12):初探延迟加载机制

NHibernate之旅(13):初探立即加载机制

第七站:数据的镜子

NHibernate之旅(14):探索NHibernate中使用视图(new!)

NHibernate之旅(15):探索NHibernate中使用存储过程(上)(new!)

NHibernate之旅(16):探索NHibernate中使用存储过程(中)(new!)

NHibernate之旅(17):探索NHibernate中使用存储过程(下)(new!)

第八站:转载请注明

NHibernate之旅(18):初探代码生成工具使用(new!)

NHibernate之旅(19):初探SchemaExport工具使用(new!)

NHibernate之旅(20):再探SchemaExport工具使用(new!)

下一站:停靠在哪儿

NHibernate之旅(21):探索对象状态(new!)

NHibernate之旅(22):探索NHibernate一级缓存(new!)

NHibernate之旅(23):探索NHibernate二级缓存(上)(new!)

NHibernate之旅(24):探索NHibernate二级缓存(下)(new!)

......期待更新......

最终站:旅途更新中

最后宣传

期待这次旅途愉快!一路顺风!期待你的再次光临!下一站我们去哪儿?


作者:李永京YJingLee's Blog
出处:http://lyj.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Tag标签: NHibernate
posted @ 2008-10-30 16:13 李永京 阅读(20112) 评论(100)  编辑 收藏 网摘 所属分类: NHibernate

  回复  引用  查看    
#1楼2008-10-30 16:15 | 侯垒      
坐上沙发,好好看.
哈哈.

  回复  引用  查看    
#2楼[楼主]2008-10-30 16:18 | 李永京      
@侯垒
好的,车上唯一的沙发就给你了,谁做板凳?

  回复  引用  查看    
#3楼2008-10-30 16:20 | Gray Zhang      
觉得……还有个dettached object的问题,即实体对象在不同的SESSION之间传递,同时又要保证lazy load等效果的问题
  回复  引用  查看    
#4楼2008-10-30 16:23 | TerryLee      
小李是个好同志!
  回复  引用  查看    
#5楼2008-10-30 16:30 | kunkun      
--引用--------------------------------------------------
李永京: @侯垒
好的,车上唯一的沙发就给你了,谁做板凳?
--------------------------------------------------------
来晚了,也没有板凳坐了,那就纯支持小李同志了。这两天要好好地看你的系列文章了。

  回复  引用  查看    
#6楼2008-10-30 16:31 | kiler      
@TerryLee
小李的文章样式和老李的文章样式很像。

  回复  引用  查看    
#7楼2008-10-30 16:35 | Justin      
很好很强大
  回复  引用  查看    
#8楼2008-10-30 16:44 | JimLiu      
@kiler
没错,哈哈

  回复  引用  查看    
#9楼2008-10-30 16:55 | 非主流程序员      
下一站去哪儿?当然是和NHibernate竞争的ADO.NET Entity Framework了。
李永京大哥也可以就自己的经验对比这2个流行的ORM。看看谁是.NET ORM的王者,看看开源社区与微软官方两大阵营的技术对决。期待中……

  回复  引用  查看    
#10楼2008-10-30 17:04 | Astar      
支持
  回复  引用  查看    
#11楼[楼主]2008-10-30 17:25 | 李永京      
@Gray Zhang
对的,使用脱离对象可以在不同Session直接,还可以转换为别的状态

  回复  引用  查看    
#12楼[楼主]2008-10-30 17:27 | 李永京      
@TerryLee
谢谢,向老李学习啊。

  回复  引用  查看    
#13楼[楼主]2008-10-30 17:28 | 李永京      
@kunkun
你动作太慢了,还可以看全部回复,这都没赶上,自己就站着吧

  回复  引用  查看    
#14楼[楼主]2008-10-30 17:29 | 李永京      
@kiler
哦,我也使用老李的那个代码插件的。

  回复  引用  查看    
#15楼[楼主]2008-10-30 17:29 | 李永京      
@Justin
谢谢支持!

  回复  引用  查看    
#16楼[楼主]2008-10-30 17:32 | 李永京      
@非主流程序员
感觉写文章不想说比较哪个,各有好处,为何去争那个面子啊,只要自己实用就行,其实NHibernate中很多东西还没有挖掘出来,还在挖

  回复  引用  查看    
#17楼[楼主]2008-10-30 17:33 | 李永京      
@Astar
谢谢支持!一下回复七位。

  回复  引用  查看    
#18楼2008-10-30 18:43 | Clingingboy      
支持,这么多.这么短时间写这么多
  回复  引用  查看    
#19楼2008-10-30 18:43 | VisualStudio      
支持一下,学习!是不是也要支持我一下啊!嘿嘿!
  回复  引用  查看    
#20楼[楼主]2008-10-30 18:46 | 李永京      
@Clingingboy
的确有点太快了,每天一篇的样子。从14号开始写到现在。下次慢点了

  回复  引用  查看    
#21楼[楼主]2008-10-30 18:47 | 李永京      
@VisualStudio
谢谢支持了啊,呵呵

  回复  引用    
#22楼2008-10-30 18:59 | csui2008[未注册用户]
对楼主强烈支持,谢谢楼主的奉献精神!
做报表怎么实现?

  回复  引用  查看    
#23楼[楼主]2008-10-30 19:12 | 李永京      
@csui2008
谢谢!
报表?NHibernate是ORM框架,你使用VS的报表开发做报表吧

好文好文啊!期待楼主后续文章!
  回复  引用  查看    
#25楼[楼主]2008-10-30 23:00 | 李永京      
@卖热干面的武汉男孩
用户名非常酷,谢谢支持,敬请期待

  回复  引用  查看    
#26楼2008-10-31 09:07 | BlueStar      
我比较期待你讲的视图,存储过程和SchemaExport,这方面网上的资料太少了,而且1.2和2.0的版本还不一样,
  回复  引用  查看    
#27楼2008-10-31 09:29 | 朝晖的.net      
@李永京

楼主什么时候分析一下Nhibernate的底层实现,session.save(object)的时候反映的commandtext是什么呢?

要是能像linq to sql 那样可以把翻译的sql脚本显示出来那就very well了·~呵呵。

好久没用nhibernate了~有合适的项目在用这个框架.

~继续关注。

  回复  引用  查看    
#28楼2008-10-31 10:25 | 巫云      
支持李老师,愿全部章节早日顺利完成。
  回复  引用  查看    
#29楼2008-10-31 10:32 | kiler      
@朝晖的.net
配置文件里面设置一个showsql=true就然后配置一下lognet可以输出了。

  回复  引用  查看    
#30楼2008-10-31 10:41 | 朝晖的.net      
@kiler

这个我还真不知道~~
thanks for you post ! :^)

  回复  引用  查看    
#31楼[楼主]2008-10-31 12:18 | 李永京      
@BlueStar
哦,好的啊

  回复  引用  查看    
#32楼[楼主]2008-10-31 12:20 | 李永京      
@朝晖的.net
我在文章中一直说到了NHibernate生成的SQL语句,只要把showsql=true就可以了,具体看看第二篇的文章。

  回复  引用  查看    
#33楼[楼主]2008-10-31 12:20 | 李永京      
@巫云
呵呵,依然是学习笔记

  回复  引用  查看    
#34楼[楼主]2008-10-31 12:21 | 李永京      
@kiler
说的没错,呵呵

  回复  引用  查看    
#35楼2008-10-31 15:37 | 圣盗      
关注
  回复  引用  查看    
#36楼[楼主]2008-11-02 15:47 | 李永京      
@圣盗
谢谢关注!

  回复  引用  查看    
#37楼2008-11-08 14:53 | Martin(高超)      
我不下地狱谁下地狱,我就做车位吧.
  回复  引用  查看    
#38楼[楼主]2008-11-08 14:56 | 李永京      
@Martin(高超)
忒搞了~~

  回复  引用    
#39楼2008-11-10 11:30 | songql[未注册用户]
加油,楼主!
不知道您即将写的关于“代码生成工具”部分,用的是什么工具呢?是codesmith吗?

  回复  引用  查看    
#40楼[楼主]2008-11-10 11:56 | 李永京      
@songql
不是的,我用开源的MyGeneration

  回复  引用  查看    
#41楼2008-11-24 20:03 | dreamistar      
楼主,写得相当不错!
有没有关于NHibernate用C/S结构来访问的资料?
请问ERP项目用这个会不会影响速度?

  回复  引用  查看    
#42楼[楼主]2008-11-24 21:03 | 李永京      
@dreamistar
NHibernate是数据访问层的东西。。与架构无关;在DAL层写一些数据操作,相当于 数据服务。然后客户直接调用一些服务就行了,客户在这里可以是Web、桌面程序、SL等等
NHibernate性能很好的啊

  回复  引用  查看    
#43楼2008-12-11 12:08 | 封士勇      
楼主很强悍啊 呵呵呵
  回复  引用    
#44楼2008-12-23 17:44 | 风行yang5658[未注册用户]
楼主...为什么<generator class="identity"/>自动生成以后的存储过程居然是这样啊"....@p4=default"?这样存储过程执行就失败了.
  回复  引用    
#45楼2008-12-23 17:44 | 风行yang5658[未注册用户]
楼主...为什么<generator class="identity"/>自动生成以后的存储过程居然是这样啊"....@p4=default"?这样存储过程执行就失败了.

  回复  引用  查看    
#46楼[楼主]2008-12-23 19:22 | 李永京      
@风行yang5658
看看存储过程那两篇文章吧,我提到这个问题了,是主键生成器问题

  回复  引用  查看    
#47楼2008-12-25 16:27 | zzticzh      
很好 很实用 支持楼主的分享精神!

  回复  引用  查看    
#48楼[楼主]2008-12-25 19:06 | 李永京      
@zzticzh
不客气~~谢谢支持~~

  回复  引用    
#49楼2008-12-29 19:22 | LeoXing[未注册用户]
请教个问题,1对多的时候,主表可以正常保存,不过子表总是update,而不是save,这一般会是那里出了问题了呢。。。我代码已经检查了N遍了。。。
  回复  引用  查看    
#50楼[楼主]2008-12-29 19:48 | 李永京      
@LeoXing
级联操作有级联更新等操作,自己修改一下就可以了

  回复  引用    
#51楼2008-12-31 11:17 | 风行yang5658 [未注册用户]
楼主...为什么<generator class="identity"/>自动生成以后的存储过程居然是这样啊"....@p4=default"?这样存储过程执行就失败了

楼主,我也用过increment,但会出现问题的问题
1 插入一行数据得到ID:5
2 删除ID为5的数据
3 再插入一行数据,这个时候,NH返回的ID为5,数据库的ID为6

  回复  引用    
#52楼2008-12-31 11:31 | 风行yang5658 [未注册用户]
用set indentity_insert off就更科幻了
有不同的两张表,一张表运行正常,另一张表运行还会出现我上述的问题.
完全迷糊了
谢谢

  回复  引用  查看    
#53楼2009-01-01 23:11 | timiil      
资料很翔实啊!!!
收藏下来先。

正在取舍EF,NH和XPO.
EF和XPO都可以使用Lambda,使用Linq的句法对实体进行检索查询,由ORM底层生成对DB的Select指令;
想请教一下,现在Linq for NH 是否已经可以使用? 是否也有相同类似的效果?

  回复  引用  查看    
#54楼[楼主]2009-01-06 20:21 | 李永京      
@风行yang5658
看看存储过程那篇笔记吧,自己也在探索中。源码最清楚了。

  回复  引用  查看    
#55楼[楼主]2009-01-06 20:23 | 李永京      
@timiil
NHibernate 接下来的2.1版本将集成LINQ to NHibernate了。期待中~~

  回复  引用    
#56楼2009-01-07 10:07 | yunggood[未注册用户]
期待中
  回复  引用    
#57楼2009-01-12 13:36 | amiya[未注册用户]
绝对要顶
  回复  引用    
#58楼2009-01-20 11:05 | wy122804912[未注册用户]
前几天NHibernate Contrib下载了NHibernate.linq软件,这是 不是就是Linq To NHibernate
  回复  引用  查看    
#60楼2009-02-12 21:55 | 鱼蛋      
可惜没有早看到lz的文章,或者说lz没早点写,走了不少弯路!
  回复  引用  查看    
#61楼2009-02-26 15:04 | yearN      
关注一下
  回复  引用  查看    
#62楼[楼主]2009-02-26 17:56 | 李永京      
@yunggood
@amiya
@鱼蛋
@yearN
谢谢支持~~~

  回复  引用  查看    
#63楼[楼主]2009-02-26 17:57 | 李永京      
@wy122804912
@默然
是的,在NHibernate Contrib上提供了NHibernate.Linq-1.0.0.Alpha下载,大家可以尝鲜一下吧,但是大多数功能还没有实现呢

  回复  引用    
#64楼2009-02-27 18:14 | 曲径通幽
摩天大楼呀,还没有电梯,我得一点一点爬。
  回复  引用    
#65楼2009-03-02 21:22 | 迷茫的小菜[未注册用户]
LZ..请饶恕我的无理!说真的.我自我感觉学得比较辛苦.自己一直很努力.但感觉自己水平并没有提高多少!(但自己真的很喜欢编程)实在是很惭愧也很懊恼..看到LZ这些牛人们很崇拜..也以你们为目标..希望有朝一日能与尔平起平坐...但越往下学发现的问题越多..身边没有可以为我答题解疑的良师益友...冒昧一下.不知LZ是否有Q.?能否与鄙人畅谈学习方法(鄙人Q:342709479)..或邮箱:342709479@qq.com..不太用博客园的Email..因为鄙人发誓..不成为个像样的程序员.不在博客园上发文...可能LZ不太愿意搭理我这种人..但.我是诚心诚意的..希望能会.(请注明老大名号!感激不尽.)
  回复  引用  查看    
#66楼[楼主]2009-03-02 22:02 | 李永京      
@迷茫的小菜
呵呵,我也是初学者啊,只要自己努力就行,每天进步一点点

  回复  引用  查看    
#67楼2009-03-03 16:46 | stg609      
楼主,你这个系列真是太好了。我正打算好好学这个呢。但是网上其它的一些文章都写的不是很好理解。看到你写的这个,实在是太激动了。
  回复  引用    
#68楼2009-03-03 19:30 | 迷茫的小菜[未注册用户]
@李永京
LZ太谦虚了..我看书经常是看过就忘..写项目也是..写过就忘..很多东西原本是会的..但一下子就忘了..不过再看一次又很快记起来了.不像第一次学的时候...不知道大家也是不是这种状态.还是我个人的状态..能畅谈下您的学习方法吗?如何学?如何能会而不忘..就算NHibernate我现在会了.但一段时间不去接触它我又忘了..呵呵.可能鄙人比较愚钝吧.请LZ赐教.!

  回复  引用  查看    
#69楼2009-03-05 20:22 | T2噬菌体      
先顶再看
  回复  引用    
#70楼2009-03-13 20:17 | 李路华
我要学习,我要努力学习!
  回复  引用  查看    
#71楼2009-03-31 11:11 | 子风      
觉得要学的东西真是太多了,谢谢楼主了。
  回复  引用    
#72楼2009-04-01 21:16 | yuan.net
非常好。。。正在学习中。。
  回复  引用    
#73楼2009-04-02 22:29 | sky114[未注册用户]
学习,正在找哪个好用,教程好呢。看楼主这么详细的介绍,太好了
请问在vs2005下可以用2.0版本的吗?

  回复  引用  查看    
#74楼[楼主]2009-04-02 23:13 | 李永京      
@sky114
完全可以的~~

  回复  引用  查看    
#75楼2009-04-04 23:49 | Showz_y      
李大哥好,最近一直在学习NHibernate,天天在你的博客上浏览,搞了几天,发现一个问题,是关于多表关联查询,然后绑定数据的问题,能否给个解答
  回复  引用  查看    
#76楼[楼主]2009-04-04 23:55 | 李永京      
@Showz_y
可以具体的吗?

  回复  引用  查看    
#77楼2009-04-05 00:34 | Showz_y      
比方说,我要绑定用户的信息和该用户订单信息和产品信息
  回复  引用  查看    
#78楼2009-04-05 22:35 | Showz_y      
楼主在吗?

  回复  引用  查看    
#79楼[楼主]2009-04-05 23:02 | 李永京      
@Showz_y
不要意思
在NHibernate中可以使用一个查询来查询这个信息,然后返回List列表,例如你绑定到GirdView中,就像数据源那样绑定的啊,不过在Web程序中NH的Session要控制好

  回复  引用  查看    
#80楼2009-04-05 23:16 | Showz_y      
<td><%# Eval("CustomerId")%></td>
<td><%# Eval("Firstname")%></td>
<td><%# Eval("Lastname")%></td>
<td><%# Eval("Orders")%></td>
是这样的绑定的啊,但是绑定Order表的时候,我要绑定OrderId,这个怎么写。
是用Repeater1绑定的,绑定IList<Customer>,因为Customer和Order是关联的,查询是可以,绑定数据不知道怎么绑定,然后Order和Product又关联,然后绑定Productid,绑定这个问题困惑了一天了,希望能给你解答,因为是初学NHibernate,望您见谅!在这里先谢谢先,呵呵

  回复  引用  查看    
#81楼[楼主]2009-04-05 23:23 | 李永京      
是<td><%# Eval("Orders.OrderId")%></td>
<td><%# Eval("Orders.Products.ProductId")%></td>吧,你看看那个List列表的属性,可以绑定的

  回复  引用  查看    
#82楼2009-04-05 23:39 | Showz_y      
哈哈,我知道你可能会这样说,但是我有这样测试过,但是一直出现这种错误
DataBinding:“NHibernate.Collection.Generic.PersistentGenericSet`1[[DomainModel.Entities.Order, DomainModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]”不包含名为“OrderId”的属性。
是什么原因呢?难道是配置文件有问题?谢谢您的解答
还有个问题额,调试程序,经常遇到超时时间已到。在操作完成之前超时时间已过或服务器未响应。 我把Connect Timeout=5000;咯

  回复  引用  查看    
#83楼[楼主]2009-04-05 23:47 | 李永京      
@Showz_y
呵呵,这是延迟加载特性,选择立即加载就可以了,你在查询中可以调试到Order列表了

  回复  引用  查看    
#84楼2009-04-05 23:52 | Showz_y      
foreach (Customer c in customers)
{
//c.CustomerId;
//c.Firstname;
//c.Lastname;

foreach (Order o in c.Orders)
{

int i = o.OrderId;
string orderDate = o.OrderDate.ToString();
foreach (Product p in o.Products)
{

float cost = p.Cost;
string name = p.Name;
int productid = p.ProductId;
}
}
是的,这样数据都能查到,但是绑定就有问题了,郁闷
关于记载特性刚开始看呢,还没深究,绑定问题搞定再说了

  回复  引用  查看    
#85楼[楼主]2009-04-06 11:12 | 李永京      
@Showz_y
还要进行转换的ISet---IList

  回复  引用  查看    
#86楼2009-04-06 19:49 | Showz_y      
小弟愚笨,希望讲细点,最好贴个代码是怎么写的,我真不知道怎么搞了,谢谢了
  回复  引用  查看    
#87楼[楼主]2009-04-06 21:30 | 李永京      
Domain----DTO,在页面上使用DTO,所谓DTO简单就是把NHibernate特有的集合转换为你需要的集合,我们通常使用List集合来绑定的。所谓DTO就是做这个事情的,对于初学者可以用Domain直接绑定到UI上面的。但是有时需要分开写查询语句。
你的DAO的查询语句怎么写的?

  回复  引用  查看    
#88楼2009-04-06 21:36 | Showz_y      
查询语句是这样的
IList<Customer> customers = _session.CreateSQLQuery("select distinct customer.* from Customer customer"
+ " inner join [Order] o on o.Customer=customer.CustomerId"
+ " inner join OrderProduct op on o.OrderId=op.[Order]"
+ " inner join Product p on op.Product=p.ProductId where o.OrderDate >:orderDate")
.AddEntity("Customer", typeof(Customer))
.SetDateTime("orderDate", orderDate)
.List<Customer>();

  回复  引用  查看    
#89楼[楼主]2009-04-06 22:47 | 李永京      
@Showz_y
现在我也在为绑定发愁~~~Tree类型,你这关闭延迟加载就可以帮上去的,不过你使用SQL查询应该没有延迟加载特性啊。

  回复  引用  查看    
#90楼2009-04-06 23:00 | Showz_y      
那现在问题出在哪呢?郁闷
  回复  引用    
#91楼2009-04-16 17:45 | 希望的田野
一个Customer有多个OrderId吧
要是绑定第一个Id
Customer里边加个属性

public int? FirstOrderId
{
get
{
if(Orders != null && Orders.Count > 0)
return Orders[0].Id;
return null;
}
}

然后绑定这个FirstOrderId就行了吧

  回复  引用  查看    
#92楼2009-04-16 19:21 | Showz_y      
呵呵,谢了啊
那一对一的时候,怎么绑定两个表的信息呢?楼上的谢谢

  回复  引用  查看    
#93楼2009-05-02 21:33 | 而且      
哈哈,终于找到教程了,非常感谢
  回复  引用    
#94楼2009-05-04 23:07 | 火舞耀阳[未注册用户]
请问下,源码在什么地方可以下呢,能分享下不
  回复  引用  查看    
#95楼[楼主]2009-05-05 08:44 | 李永京      
@火舞耀阳
提供一部分下载了~~

  回复  引用    
#96楼2009-05-08 09:22 | oversoul[未注册用户]
楼主真的很强大,什么时候能讲下跟SPRING.NET的整合问题。
  回复  引用    
#97楼2009-06-01 21:24 | baicaps[未注册用户]
正在学习Nhibernate,收藏了
  回复  引用  查看    
#98楼2009-06-29 15:31 | GWPBrian      
一直以为Nhibernate是Java的东西。对Nhibernate的了解几乎为零,呵呵。
慢慢学习下!

  回复  引用  查看    
#99楼2009-06-30 15:31 | JL      
使用MyGeneration工具时生成的cs和xml中出现unknown,能否提供一个准确的模版??????

  回复  引用  查看    
#100楼[楼主]2009-07-01 08:50 | 李永京      
@JL
暂时没有

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1323099 85SRymkCyjY=



历史上的今天:
2007-10-30 Tips/Tricks#0:母版页中对控件ID的处理

相关文章:

相关链接: