随笔分类 - NHibernate
摘要:问题NHibernate的many-to-one关联是支持多态的(理应),然而一不留神,代码就掉进了陷阱。考虑这个类图,OrderLine 有一个Product属性,同时,Product有两个子类。这个关联的映射:<many-to-one Name="Product" class="Product" column="ProductId" />接下来,要为 Food 的订单行执行一点特别的业务逻辑:OrderLine line = ...;if (line.Product is Food){ // 永远不会执行到这里}即使
阅读全文
摘要:nh胜出的地方linq语法很舒服,但是hql更强大,由于没有编译时检查,甚至可以在父对象使用子对象的属性对于select n+1问题,nh的批量抓取是个不错的办法nh有二级缓存nh提供版本管理ef提供了一个设计器,有了这个设计器,ef在很多实际场合变成了关系数据的附庸,失去了ORM的本性ef胜出的地方ef构造.net对象的速度比nh快ef是MS的,背后的人力财力不是nh能比的ef在medium t...
阅读全文
摘要:针对数据访问代码的单元测试处在一个尴尬的位置上,如果操作不是针对真实的数据库执行的,就无法捕获数据库特定的错误,比如 sql 语句语法是否正确,操作是否违反了数据库约束,事务是否正确提交。并且,测试之间应该是隔离的,一个测试不能影响另一个测试的数据,就是说,每个测试运行之前都要重建表结构,重新安装测试数据。在一个真实的数据库上执行这些操作会让测试成为老牛破车。所幸的是Sqlite提供了内存数据库,避免磁盘IO可以带来性能提升。内存数据库有一个非常重要的特点:即数据库仅在连接打开的时候存在,一旦连接关闭,数据库随即消失。这正是我们想要的,运行测试的步骤如下:1,在 [TestInitialize
阅读全文