我正在将NHibernate 3.0与LINQ提供程序和QueryOver一起使用.有时我想急切加载相关数据,并且在LINQ和QueryOver中都有"获取"方法.现在我有一个特殊的场景,我想在第二层上不直接加载属性,例如:
Foo f = ...;
f.A.B.C
Run Code Online (Sandbox Code Playgroud)
使用LINQ没有问题,因为您可以使用"ThenFetch"方法"链接"提取,如:
var result = Session.Query<Foo>().Fetch(a => a.A).ThenFetch(b => b.B).ThenFetch(c => c.C).ToList();
Run Code Online (Sandbox Code Playgroud)
在QueryOver中没有这样的方法,那么如何才能获得相同的结果呢?
提前致谢.
我在我的MVC应用程序中有一个查询,大约需要20秒才能完成(使用NHibernate 3.1).当我在Management studio上手动执行查询时,需要0秒.
我已经看到了类似于这个类似问题的类似问题,所以我进一步考虑了我的测试.
我使用Sql Server Profiler拦截了查询,并在我的应用程序中使用ADO.NET执行了查询.
我从Profiler获得的查询类似于:"exec sp_executesql N'select ...."
我的ADO.NET代码:
SqlConnection conn = (SqlConnection) NHibernateManager.Current.Connection;
var query = @"<query from profiler...>";
var cmd = new SqlCommand(query, conn);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return RedirectToAction("Index");
Run Code Online (Sandbox Code Playgroud)
此查询也非常快,没有时间执行.
另外,我在Profiler上看到了一些非常奇怪的东西.从NH执行时,查询具有以下统计信息:
读取:281702写道:0
来自ADO.NET的那个:
读:333写:0
有人有任何线索吗?我可以提供任何信息来帮助诊断问题吗?
我认为它可能与某些连接设置有关,但ADO.NET版本使用的是NHibernate的相同连接.
提前致谢
更新:
我正在使用NHibernate LINQ.查询是巨大的,但是是一个分页查询,只提取了10条记录.
传递给"exec sp_executesql"的参数是:
@ p0 int,@ p1 datetime,@ p2 datetime,@ p3 bit,@ p4 int,@ p5 int
@ p0 = 10,@ p1 ='2009-12-01 00:00:00',@ p2 ='2009-12-31 23:59:59',@ p3 = 0,@ p4 = 1,@ p5 = 0
我正在尝试将以下示例节点应用程序部署到Azure网站:
var http = require('http');
var port = process.env.port || 1337;
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/html' });
try {
var canvasModule = require('canvas'),
canvas = new canvasModule(200, 200),
ctx = canvas.getContext('2d');
ctx.rotate(0.5);
ctx.font = '30px Impact';
var message = "Hello World";
ctx.fillText(message, 40, 40);
ctx.strokeRect(30, 5, 160, 50);
res.end('<html><img src="' + canvas.toDataURL() + '" /></html>');
} catch (e) {
res.end('Error: ' + e);
}
}).listen(port);
Run Code Online (Sandbox Code Playgroud)
棘手的部分是我正在使用一个名为" canvas " 的节点模块,需要在安装时使用node-gyp进行编译.
根据此 Microsoft页面,Azure网站不支持本机模块,并且应将模块的已编译版本复制到Azure以使应用程序正常工作:
本机模块
虽然大多数模块只是纯文本JavaScript文件,但某些模块是特定于平台的二进制映像.这些模块在安装时编译,通常使用Python和node-gyp.Azure网站的一个特定限制是,虽然它本身了解如何安装package.json或npm-shrinkwrap.json文件中指定的模块,但它不提供Python或node-gyp,并且无法构建本机模块.
由于Azure云服务依赖于作为应用程序一部分部署的node_modules文件夹,因此作为已安装模块的一部分包含的任何本机模块应在云服务中工作,只要它在Windows开发系统上安装和编译即可.
Azure网站不支持本机模块.某些模块(如JSDOM和MongoDB)具有可选的本机依赖项,并且可以与Azure网站中托管的应用程序一起使用.
我将所有内容部署到Azure(使用发布向导),所有文件都发送到Azure(显然至少),包括已编译的模块.在Azure上运行站点时,我获得以下异常: …
我真的不明白在C++/CX中shared_ptr和新句柄符号(^)之间的区别.根据我的阅读,他们似乎在引用计数和内存管理方面做同样的事情.我错过了什么?
std::shared_ptr<Type>
//vs
Type^
Run Code Online (Sandbox Code Playgroud) 我想在此地图中添加更多图钉。我尝试复制这部分:
\n\nlongitude[1] = 41.799645 //second defined Location\nlatitude[1] = 20.913514\ntitle[1] = "Kipper Market"\ndescription[1] = "Kipper Gostivar"\n
Run Code Online (Sandbox Code Playgroud)\n\n但我没有看到任何其他添加的引脚!有人可以帮忙吗?\n*我对java脚本几乎一无所知,所以如果我没有正确地提出我的问题,请不要评判我。\n谢谢!
\n\n\n\n\n
\n\n function GetMap() {\n var longitude = new Array();\n var latitude = new Array();\n var title = new Array();\n var description = new Array();\n\n\n longitude[0] = 42.0076215 //two defined locations\n latitude[0] = 20.9689308\n title[0] = "Kipper Market"\n description[0] = "Braka Miladinovi 178, 1200 Tetov\xc3\xab, Tetovo, Macedonia"\n\n longitude[1] = 41.799645 //second defined Location\n latitude[1] = 20.913514\n title[1] = "Kipper Market"\n description[1] …
Run Code Online (Sandbox Code Playgroud) nhibernate ×2
ado.net ×1
azure ×1
bing-maps ×1
c++ ×1
c++-cx ×1
c++11 ×1
javascript ×1
maps ×1
node-modules ×1
node.js ×1
performance ×1
queryover ×1
sql-server ×1