0

由于部分信任问题,我们目前正在从我们的应用程序中删除 fluent nhibernate。我们正在使用他们的 fluent API 迁移到 Entity Framework 5.1RC。

我们的存储库中有以下方法,我试图找出是否可以使用实体框架编写相同的查询?我显然在寻找它尽可能高效。

    public PagedList<Topic> GetRecentTopics(int pageIndex, int pageSize, int amountToTake)
    {
        // Get a delayed row count
        var rowCount = Session.QueryOver<Topic>()
                        .Select(Projections.RowCount())
                        .Cacheable()
                        .FutureValue<int>();

        // Get the topics using an efficient query
        var results = Session.QueryOver<Topic>()                            
                        .OrderBy(x => x.CreateDate).Desc
                        .Skip((pageIndex - 1) * pageSize)
                        .Take(pageSize)
                        .Cacheable()
                        .Future<Topic>().ToList();

        // We might only want to display the top 100
        // but there might not be 100 topics
        var total = rowCount.Value;
        if (total > amountToTake)
        {
            total = amountToTake;
        }

        // Return a paged list
        return new PagedList<Topic>(results, pageIndex, pageSize, total);
    }

非常感谢任何帮助/指针。

4

1 回答 1

2

AFAIK EF 没有查询批处理,请参见此处。你可以自己实现它,这很棘手。

或者,您可以让 NH 在中等信任下工作,这里这里的信息。

此链接的评论中,有一个指向在中等信任下工作的 NHibernate dll 的链接(我自己没有测试过)。

于 2012-07-10T12:13:15.727 回答