怎么办呢?这问题困惑了我很久,看来只能从新写一个集合类来实现数据绑定了(实现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的说明。)
贴一段我写的代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
Hibernate Mapping:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
由于NHibernate.Databinding.BindingSet 这个类实现了 IBindingList<T> 接口,而此接口定义了ListChange事件,自此我们可以把他用来实现complex binding了!
![](https://www.cnblogs.com/Emoticons/tusiji/202939796.gif)
有意交流或者有问题的可以加我QQ:247701287