扩展Nhibernate以在获取或映射中使用“内部远程连接”

时间:2013-09-24 14:09:04

标签: c# sql-server nhibernate nhibernate-mapping

我有一个链接服务器的远程表,我需要使用Nhibernate 3.3加入SQL Server 2008 R2中的本地表。

我使用Nhibernate 3.3.1.4000和FluenNhibernate来映射类。如果我使用普通连接,它会起作用,但是非常慢(大约30秒)。

在SQL server management studio中,如果我使用“远程”提示,查询将在不到一秒的时间内返回。

慢查询(30秒以上)

Select table1.field1, table2.field2 from table1 inner join table2 on table1.id = table2.id

快速(不到1秒)

Select table1.field1, table2.field2 from table1 inner remote join table2 on table1.id = table2.table1_id

在代码中,我使用nhibernate.linq获取结果:

session.Query<table1>.FetchMany(x => table2s);

我正在寻找一种方法来强制nhibernate使用内部远程连接(我知道它是特定于sql server的。)

我还试图找到一种方法将我的实体映射到一个存储过程,它将加载实体(table1)和它的子(table2)实体,但找不到明确的方法。大多数涉及使用hbm文件,但我不确定如何映射存储过程中的子集合。

感谢。


为了完整起见,我最终创建了一个包含远程连接的特殊视图,并将此视图在nhibernate中映射到另一个模型类。

1 个答案:

答案 0 :(得分:1)

我认为这并不容易。

您可以编写自己的驱动程序,它会改变用例的连接子句。

然而,此用例的sql query可能更容易。我猜你每行可以有多个实体,多个.AddEntity(),但是你必须在代码中对它们进行分组。