NHibernate简化了DLL,但降低了性能?

Northwind的Employee和Territories具有多对多的关系,关系存放在EmployeeTerritories表里。

所以在两个Entity建立many-to-many。

Employees.hbm.xml:

<bag name="EmployeeTerritories" table="EmployeeTerritories" inverse="false" lazy="true" cascade="all-delete-orphan">
   <key>
    <column name="EmployeeID" length="4" sql-type="int" not-null="true"/>
   </key>
   <many-to-many class="DataEntity.Territory, DataEntity"> 
    <column name="TerritoryID" length="20" sql-type="nvarchar" not-null="true"/>
   </many-to-many>
  </bag>

Territories.hbm.xml:

<bag name="TerritoryEmployees" table="EmployeeTerritories" inverse="true" lazy="true" cascade="all-delete-orphan">
      <key>
        <column name="TerritoryID" length="20" sql-type="nvarchar" not-null="true"/>
      </key>
      <many-to-many class="DataEntity.Employee, DataEntity">
        <column name="EmployeeID" length="4" sql-type="int" not-null="true"/>
      </many-to-many>
  </bag>

在EmployeeTerritories里,原先Employee有一个记录对应Territories的5条记录,
EmployeeID  territoryid
15                 01881
15                 01882
15                 01883
15                 01884
15                 01885

现在要给这个EmployeeID=15的记录添加新的Territories记录(territoryid=01886)

ISession session = SessionFactory.OpenSession(_AssemblyName);

Employee employee = null;
            Territory territory = null;

//try...
            //catch...
            //finaly...
            ITransaction transaction = session.BeginTransaction();
            territory = (Territory)session.Get(typeof(Territory), "01886");
            transaction.Commit();

transaction = session.BeginTransaction();
            employee = (Employee)session.Get(typeof(Employee), 15);
            employee.EmployeeTerritories.Add(territory);
            session.Update(employee);
            transaction.Commit();

用sql查看器查看,发现sql先delete了原来的EmployeeID=15的5条记录,然后再insert这5条记录,再insert新的id=01886的记录,总共执行了7条sql语句

如果原先有上百条记录,那不是要执行几百条记录了?NHibernate中有没有什么配置可以改变?

转载于:https://www.cnblogs.com/sunsolaris/archive/2008/10/10/1308256.html

nhibernate之many-to-many的性能相关推荐

  1. 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能...

    下期预告: 由于很多园友反馈,有的组件不应该缺席.测试复杂度不够.测试还缺乏一定的公平. 因此考虑在下一个版本中,确保在更加公平的前提下进行更高复杂度的测试 . 同时将分为2组测试,纯SQL组件及纯O ...

  2. ADO.NET、ODP.NET、Linq to SQL、ADO.NET Entity 、NHibernate在Oracle下的性能比较

    下面我对Oracle数据库在.NET平台下的主要几种数据访问方式进行测试. 下面是测试表: CREATE TABLE CUSTOMERS ( "CUSTOMER_ID" NUMBE ...

  3. 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能

    "啊!你在用ORM?会不会性能很差啊?" 用数字来说话,打破模糊的.传言的印象. 标题提到的组件"增删改查"都实现了测试代码,所以除了测试外,也可以把此项目作为 ...

  4. DataVeryLite和Nhibernate性能对比

    电脑型号:acer 4752g 电脑配置: 代码分享: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Debug.Listen ...

  5. .net平台性能很不错的轻型ORM类Dapper(转)

    .net平台性能很不错的轻型ORM类Dapper Posted By : 蓝狐 Updated On : 2016-04-22 23:16 dapper只有一个代码文件,完全开源,你可以放在项目里的任 ...

  6. [NHibernate] Guid 作主键速度超慢的背后

    最近遇到了一个让人抓狂的性能问题.生产环境里有一张表的数据量目前达到了 70 万条.结果发现无论是匹配主键的查询还是更新,执行一条语句居然需要 3.5 秒!如果把 NH Prof 中截获的 SQL 语 ...

  7. NHibernate Step by Step:序篇 (转)

    原文出处:http://www.cnblogs.com/abluedog/archive/2006/04/15/375676.html 原文作者:abluedog 很久以前,你可能习惯了connect ...

  8. 从java中的hibernate看Ado.net 与NHibernate的关系

    看了许多人的文章,将Ado.net 与NHibernate看作类似的东西,频繁将两者进行比较.对于那些朋友的观点,我不认同!      我认为ado.net 和 nhibernate是完全不同层次的东 ...

  9. NHibernate: Session.Save 采用版本控制时无必要地自动Update版本字段的问题

    最近发现一个问题,Session.Save(entity)时,如果entity是新实体(version字段为0,假设0为unsaved-value),则NHibernate执行的SQL除了应该出现的I ...

最新文章

  1. 五分钟使你的Firefox快两倍
  2. python软件是干什么用的-python中的django是做什么的
  3. Java黑皮书课后题第5章:5.6(英里与千米之间的互换)编写一个程序,并排显示下面两个表格
  4. “只有DBA才能导入由其他DBA导出的文件”各种解决办法
  5. 怎么用计算机求浮动额,2015计算机一级考试MSOFFICE上机综合训练(5)
  6. 服务器拒绝mac访问共享文件,Mac共享文件连接失败怎么办?Mac无法访问打开共享文件解决方法...
  7. oracle建表语句6,Oracle建表语句
  8. 【20220627】【信号处理】自相关函数的定义、计算方法及应用
  9. python 折线图 excel_如何使用python读取excel数据并绘制折线图
  10. 中国石油大学(北京)-《 公共社交礼仪 》-答案
  11. 大业达公司裁员风云2
  12. springboot实现pdf里面插入图片
  13. Markdown设置图片大小
  14. FastReport开发指南
  15. MonoRail学习笔记四:MonoRail基本流程分析
  16. libevent 使用流程
  17. 盘点世界上奇怪的 6 种编程语言
  18. Swagger UI教程 API 文档神器 搭配Node使用
  19. vs2015配置VAssistX
  20. 腾讯优测优分享 | 分布式系统测试的应用方法——场景注入测试

热门文章

  1. ESX 4 无法启动vSphere Web Access
  2. Factom(公证通)--基于区块链的存证系统
  3. AFNetworking框架-详细解析
  4. CentOS 更改Apache默认网站目录
  5. Python 编码风格参考
  6. POJ 3517 And Then There Was One( 约瑟夫环模板 )
  7. eeplat开发平台概念理解
  8. java实现循环链表
  9. Bw树:新硬件平台的B树(内存数据库中的b树索引)
  10. 无法安装声卡及MODEM驱动