如何处理LinqServerModeDataSource和数据上下文?

时间:2012-10-15 16:46:53

标签: c# .net entity-framework-4.1 objectcontext

我正在尝试学习如何使用 LinqServerModeDataSource DevExpress控件。承诺是控件将接受可查询(查询),动态修改它,并从数据库服务器中仅提取需要显示的数据。在处理大型数据集时,这应该会带来更快的性能。

我正在使用Entity Framework 4.1。我的所有对象都是使用ADO.NET POCO实体生成器(ObjectContext)

创建的

到目前为止我做了什么:

我放弃了页面ASPxGridView和LinqServerModeDataSource控件,并做了所有必要的布线...

LinqServerModeDataSource1_Selecting 方法中我有这样的事情:

e.KeyExpression = "CarwashId";
e.QueryableSource = Carwashes.GetCarWashes().AsQueryable();

我的GetCarWashes方法定义如下:

public static IQueryable<Carwash> GetCarWashes()
{
    using (var ctx = new LMEntities(PBase.EntityFrameworkConnectionString))
    {
        var query = from c in ctx.Carwashes
                    join d in ctx.Stations on c.StationId equals d.StationId
                    orderby d.Number
                    select c;
        return query;
     }
}

问题是我总是得到空格,没有结果。通过我迄今为止学到的关于EF的知识,它是有道理的,因为查询实际上从未被评估过。如果我在上面的方法中更改return语句以返回query.ToList()然后,当然,我得到我在网格中显示的记录,但是不是那个打败了LinqServerModeDataSource控件的目的吗?

问题:

我知道这与处理数据上下文的问题有关。所以,如果我在 LinqServerModeDataSource1_Selecting 里面放置代码如下:

var ctx = new LMEntities();
e.QueryableSource = from c in ctx.Carwashes
                    join d in ctx.Stations on c.StationId equals d.StationId
                    orderby d.Number
                    select c;

一切正常,并显示记录。

但是如果我使用像这样的dispose context(注意使用语句):

using (var ctx = new LMEntities());
{
    e.QueryableSource = from c in ctx.Carwashes
                        join d in ctx.Stations on c.StationId equals d.StationId
                        orderby d.Number
                        select c;
}

在这种情况下,我没有数据行 那么,这里发生了什么?我被认为总是使用使用语句来确保正确的对象处理。此外,在我的应用程序中,需要将数据层保存在单独的项目中。如果我必须有开放数据上下文,那么我该如何保持这种分离?

谢谢

0 个答案:

没有答案