杨同学的博客
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 4 文章- 0 评论- 25
NHibernate 与数据绑定
NHibernate 为了优化性能, 提供了自己的 custom collection(ie. bag, set ...)。 当我们定义一个one-many mapping 的时候, 应当在父类里面定义IList<child> children; 这样的一个集合(NH1.2 里面的所有集合类都实现 IList 接口 )。然而NHibernate自身提供的集合并没有implement IBindingList<T> , 也就是说如果我们使用NHibernate将无法实现.net 2.0 里面的complex databinding。 我想这点是NHibernate团队把 Hibernate照原样搬到.net 里来的时候所没有想到的,因为java里面没有databinding这个东东。
怎么办呢?这问题困惑了我很久,看来只能从新写一个集合类来实现数据绑定了(实现IBindingList<T> 的NHibernate 自定义集合类)。看起来还是蛮吓人的,就为了这个数据绑定写一个集合类。 还好我比较聪明,去网上找了一下看看有没有相关的资料, 找到了这个好东东:
NHibernate.Databinding
这是一个开源的NHibernate 扩展dll,专门为了支持complex binding做的。
具体使用方法,
1. 先吧NHibernate.Databinding.Dll 添加到项目中。
2. 把原有的集合类(bag) 替换成 BindingSet。
3. 使用 BindingSet.GetInstance<T>() generic方法生成BindingSet的实例 (不知道为什么不用constructor, 这里应该不会是用了singleton pattern呀,奇怪)
4. 在hbm 映像文件里面使用set 集合来指定BindingSet这个集合的类型。
5. 在hbm 文件里面指定使用 NHibernate.Databinding.dll 里面定义的accessor (当你存取你的object的时候,此accessor类被NHibernate 用来通过反射的途径从你的object的member variable 或者property中取值或者赋值,详细可以看Hibernate文档中hbm映像文件里 对access attribute的说明。)
贴一段我写的代码:
private
BindingSet
<
Plot
>
plots
=
BindingSet.GetInstance
<
Plot
>
();
public
BindingSet
<
Plot
>
Plots
{
get
{
return
plots;
}
}
Hibernate Mapping:
<
set
name
="Plots"
cascade
="all"
lazy
="true"
inverse
="true"
access
="NHibernate.DataBinding.BindingAccessor+CamelCase, NHibernate.DataBinding"
>
<
key
column
="PVAuto"
/>
<
one-to-many
class
="RWeb6.BO.FormationPressure.Plot, RWeb6.BO.FormationPressure"
/>
</
set
>
由于NHibernate.Databinding.BindingSet 这个类实现了 IBindingList<T> 接口,而此接口定义了ListChange事件,自此我们可以把他用来实现complex binding了!
有意交流或者有问题的可以加我QQ:247701287
Tag标签:
NHibernate
,
databinding
,
数据绑定
posted @ 2008-05-20 23:12
杨同学
阅读(215)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
博客园首页
新闻频道
社区
小组
博问
网摘
闪存
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-06-18 12:42 编辑过
成果网帮您增加网站收入
相关文章:
NHibernate学习
浅谈.NET中的数据绑定表达式(二)
Enterprise Library系列文章回顾与总结
深入ASP.NET数据绑定(上)
NHibernate翻译文档提供下载(chm和html格式)
数据绑定
相关链接:
最新IT新闻:
Google 10周岁生日
祝Google 10周岁生日快乐
Google十年市值达1500亿美元 创造奇迹
GMail:回过头来支持IE6
Google十年大变样
<
2008年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参加的小组
每日一句英语
我的标签
colorful Cursor(1)
Win form(1)
IntPtr(1)
smartclient(1)
SCSF(1)
CAB(1)
NHibernate(1)
databinding(1)
数据绑定(1)
认证(1)
随笔档案
2008年6月 (2)
2008年5月 (1)
2008年4月 (1)
相册
公司
编程友人
Martin Fowler
最新评论
阅读排行榜
1. 微软新一代认证体系出台(2764)
2. CAB 默认模块装载器中的Bug(1230)
3. NHibernate 与数据绑定(215)
4. 在winform的控件上面如何使用彩色的鼠标指针(99)
评论排行榜
1. 微软新一代认证体系出台(18)
2. CAB 默认模块装载器中的Bug(6)
3. 在winform的控件上面如何使用彩色的鼠标指针(1)
4. NHibernate 与数据绑定(0)