天天看点

[NHibernate]视图处理

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t1" target="_blank">写在前面</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t2" target="_blank">文档与系列文章</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t3" target="_blank">视图</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t4" target="_blank">一个例子</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082899.html#t5" target="_blank">总结</a>

前面的文章主要讲了对物理数据表的操作,当然了nhibernate同样可以操作视图,本文将讲nhibernate对视图操作的种种。

<a href="http://www.cnblogs.com/wolf-sun/p/3694592.html">[nhibernate]体系结构</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3694901.html">[nhibernate]isessionfactory配置</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3704012.html">[nhibernate]持久化类(persistent classes)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3705229.html">[nhibernate]o/r mapping基础</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3720259.html">[nhibernate]关联映射</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3721528.html">[nhibernate]parent/child</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3724052.html">[nhibernate]缓存(nhibernate.caches)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734249.html">[nhibernate]nhibernate.tool.hbm2net</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3734313.html">[nhibernate]nullables</a>

<a href="http://www.cnblogs.com/wolf-sun/p/3956802.html">[nhibernate]nhibernate如何映射sqlserver中image字段</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4046672.html">[nhibernate]条件查询criteria query</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4048048.html">[nhibernate]增删改操作</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4049716.html">[nhibernate]事务</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4050714.html">[nhibernate]并发控制</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4067026.html">[nhibernate]组件之依赖对象</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4068749.html">[nhibernate]一对多关系(级联删除,级联添加)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4070935.html">[nhibernate]一对多关系(关联查询)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4074654.html">[nhibernate]多对多关系(关联查询)</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4077226.html">[nhibernate]延迟加载</a>

<a href="http://www.cnblogs.com/wolf-sun/p/4082432.html">[nhibernate]立即加载</a>

首先创建一个vw_customerorder(采用同数据表相同的命名规则,如数据表tb_customer)的视图,选中customerid,customername,customeraddress,orderid,orderdate字段

[NHibernate]视图处理
[NHibernate]视图处理

添加视图的持久化类

[NHibernate]视图处理
[NHibernate]视图处理

注意:对视图最常用的是查询操作,视图是一张虚表,也就是只读的(数据的来源是来自物理表的)。所以这里将持久化类的属性设置为只读的(private set)就可以了,如果真想修改数据了,就通过修改物理表的数据。

编写映射文件customerorderview.hbm.xml

[NHibernate]视图处理
[NHibernate]视图处理
注意:1,在nhibernate中使用视图的时候,最容易忽略的就是没有给视图指定主键,这种情况下很容易出错。          2,注意映射文件中class节点指定mutable="false"属性(对对象的修改不能持久化到数据库中)。          3,记得添加过映射文件,修改hbm.xml属性为嵌入资源

测试

 获取某客户下面所有的订单信息。

[NHibernate]视图处理
[NHibernate]视图处理

此时会有一个异常

[NHibernate]视图处理
[NHibernate]视图处理

意思已经很明白了,说属性的set方法,应该是public或者protect virtual的。解决办法,要么修改回默认的public,要么修改映射文件的默认加载方式将hibernate-mapping的default-lazy属性设置为false。让他立即加载。

[NHibernate]视图处理
[NHibernate]视图处理

结果

[NHibernate]视图处理

生成的sql语句

[NHibernate]视图处理

本文介绍了在nhibernate中使用视图的内容,遇到一个bug,将解决bug的过程分享了一下,遇到bug不要慌,解决了一个bug,你就会对它印象深刻,至少下次再遇到了,你知道如何去解决了,也是一种进步,不要怕犯错。

博客地址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

博客版权:

本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。

如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!

再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/4082899.html