Jus*_*tin 3 c# nhibernate future
我是NHibernate的IEnumerable Future()的新手;说以下
// Summary:
// Get a enumerable that when enumerated will execute a batch of queries in
// a single database roundtrip
Run Code Online (Sandbox Code Playgroud)
只是想知道这意味着什么,描述与“未来”一词无关
只要数据库支持,Future允许在一次往返中执行两个或更多sql。
它几乎也是透明的,因此您将尽可能使用Future。如果NHibernate无法在一次往返中执行查询,则它将按预期在两次或更多次中执行查询。
来自http://ayende.com/blog/3979/nhibernate-futures
让我们看一下下面的代码:
using (var s = sf.OpenSession())
using (var tx = s.BeginTransaction())
{
var blogs = s.CreateCriteria<Blog>()
.SetMaxResults(30)
.List<Blog>();
var countOfBlogs = s.CreateCriteria<Blog>()
.SetProjection(Projections.Count(Projections.Id()))
.UniqueResult<int>();
Console.WriteLine("Number of blogs: {0}", countOfBlogs);
foreach (var blog in blogs)
{
Console.WriteLine(blog.Title);
}
tx.Commit();
}
Run Code Online (Sandbox Code Playgroud)
此代码将生成对数据库的两个查询。对数据库的两个查询非常昂贵,我们可以看到,从数据库获取数据花了我们114ms的时间。我们可以做得更好,让我们告诉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();
}
Run Code Online (Sandbox Code Playgroud)
我们只需要一次查询两个查询,而不必两次访问数据库。速度差异非常大,从80 ms变为114 ms,因此节省了大约30%的总数据访问时间,总共节省了34 ms。
| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |