Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework NHibernate实体框架等效物“;“未来查询”;_Entity Framework_Nhibernate - Fatal编程技术网

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:同意,当您显示结果页面并需要显示项目总数时,它非常棒——无需进行两次数据库往返