Entity framework NHibernate实体框架等效物“;“未来查询”;
实体框架有一个名为的扩展,允许同时对查询进行批处理和处理 例如,从他们的文档:Entity framework NHibernate实体框架等效物“;“未来查询”;,entity-framework,nhibernate,Entity Framework,Nhibernate,实体框架有一个名为的扩展,允许同时对查询进行批处理和处理 例如,从他们的文档: // build up queries var q1 = db.Users .Where(t => t.EmailAddress == "one@test.com") .Future(); var q2 = db.Tasks .Where(t => t.Summary == "Test") .Future(); // this triggers the loading
// build up queries
var q1 = db.Users
.Where(t => t.EmailAddress == "one@test.com")
.Future();
var q2 = db.Tasks
.Where(t => t.Summary == "Test")
.Future();
// this triggers the loading of all the future queries
var users = q1.ToList();
NHibernate中是否有任何等效功能,或者可能提供这种功能的扩展?是的,有这样的功能。如果你读到以下内容,那就最好了: 艾恩德氏 小引用: NHibernate 2.1中最优秀的新功能之一是
Future()
和FutureValue()
函数。它们本质上是一种将查询执行推迟到以后的方式,在这一点上,NHibernate将获得有关应用程序应该做什么的更多信息,并相应地进行优化。这是基于NHibernate的一个现有特性,即多查询,但其实现方式易于使用且几乎无缝
那篇文章中的一些例子:
using (var s = sf.OpenSession())
using (var tx = s.BeginTransaction())
{
var blogs = s.CreateCriteria<Blog>()
.SetMaxResults(30)
.Future<Blog>();
var countOfBlogs = s.CreateCriteria<Blog>()
.SetProjection(Projections.Count(Projections.Id()))
.FutureValue<int>();
Console.WriteLine("Number of blogs: {0}", countOfBlogs.Value);
foreach (var blog in blogs)
{
Console.WriteLine(blog.Title);
}
tx.Commit();
}
使用(var s=sf.OpenSession())
使用(var tx=s.BeginTransaction())
{
var blogs=s.CreateCriteria()
.SetMaxResults(30)
.Future();
var countOfBlogs=s.CreateCriteria()
.SetProjection(projects.Count(projects.Id()))
.未来价值();
WriteLine(“博客数量:{0}”,countOfBlogs.Value);
foreach(博客中的var博客)
{
Console.WriteLine(blog.Title);
}
tx.Commit();
}
是的,有这样的功能。如果你读到以下内容,那就最好了:
艾恩德氏
小引用:
NHibernate 2.1中最优秀的新功能之一是Future()
和FutureValue()
函数。它们本质上是一种将查询执行推迟到以后的方式,在这一点上,NHibernate将获得有关应用程序应该做什么的更多信息,并相应地进行优化。这是基于NHibernate的一个现有特性,即多查询,但其实现方式易于使用且几乎无缝
那篇文章中的一些例子:
using (var s = sf.OpenSession())
using (var tx = s.BeginTransaction())
{
var blogs = s.CreateCriteria<Blog>()
.SetMaxResults(30)
.Future<Blog>();
var countOfBlogs = s.CreateCriteria<Blog>()
.SetProjection(Projections.Count(Projections.Id()))
.FutureValue<int>();
Console.WriteLine("Number of blogs: {0}", countOfBlogs.Value);
foreach (var blog in blogs)
{
Console.WriteLine(blog.Title);
}
tx.Commit();
}
使用(var s=sf.OpenSession())
使用(var tx=s.BeginTransaction())
{
var blogs=s.CreateCriteria()
.SetMaxResults(30)
.Future();
var countOfBlogs=s.CreateCriteria()
.SetProjection(Projections.Count(Projections.Id()))
.未来价值();
WriteLine(“博客数量:{0}”,countOfBlogs.Value);
foreach(博客中的var博客)
{
Console.WriteLine(blog.Title);
}
tx.Commit();
}
要扩展@Radim的答案,下面是使用LINQ到NHibernate的等效代码:
IEnumerable<Users> users = session.Query<Users>()
.Where(p => p.EmailAddress == "one@test.com")
.ToFuture();
IEnumerable<Tasks> tasks = session.Query<Tasks>()
.Where(p => p.Summary == "Test")
.ToFuture();
IEnumerable users=session.Query()
.其中(p=>p.EmailAddress==”one@test.com")
.ToFuture();
IEnumerable tasks=session.Query()
.其中(p=>p.摘要==“测试”)
.ToFuture();
正如您所期望的,这两个查询都将在需要处理其中一个查询时进行批处理和执行。要扩展@Radim的答案,下面是使用LINQ到NHibernate的等效代码:
IEnumerable<Users> users = session.Query<Users>()
.Where(p => p.EmailAddress == "one@test.com")
.ToFuture();
IEnumerable<Tasks> tasks = session.Query<Tasks>()
.Where(p => p.Summary == "Test")
.ToFuture();
IEnumerable users=session.Query()
.其中(p=>p.EmailAddress==”one@test.com")
.ToFuture();
IEnumerable tasks=session.Query()
.其中(p=>p.摘要==“测试”)
.ToFuture();
正如您所期望的,这两个查询都将在需要处理其中一个时进行批处理和执行。。需要补充说明的是,这是一个很酷的功能,我确实经常使用它——几乎必须用于列表及其总计数…@RadimKöhler:同意,当您显示结果页面并需要显示项目总数时,它非常棒——无需使两个数据库循环三次。需要补充说明的是,这是一个很酷的功能,我确实经常使用它——几乎必须用于列表及其总计数…@RadimKöhler:同意,当您显示结果页面并需要显示项目总数时,它非常棒——无需进行两次数据库往返