如何通过PRESENTER将数据从数据库传输到VIEW?

时间:2015-12-25 08:41:10

标签: c# winforms entity-framework linq mvp

我正在尝试使用WinForms创建实现MVP模式的应用程序。

其中我也使用EF + CodeFirst + Linq。

VIEW 上有DataGridView控件,需要填写数据。 VIEW 调用 PRESENTER 类的方法SELECT(),后者又调用 MODEL 类的方法SELECT()

如何通过 PRESENTER 将数据从数据库传输到查看

我正在尝试使用return,但它不起作用,因为我正在使用USING块。

internal void Select()
{
    using (GoodsContext context = new GoodsContext())
    {
        var items = from Items in context.Goods
                    select Items;
    }
}

3 个答案:

答案 0 :(得分:1)

非常有趣的问题。当然可以实现查询并将其作为IEnumerable返回,但我想知道将它作为IQueryable返回的方式是什么,以允许进一步过滤/排序等。我看到的唯一方法是处置DbContext(显然返回的可查询对象保留引用),但它是否安全?然后我用谷歌搜索了Do I always have to call Dispose() on my DbContext objects? Nope。内部的解释对我来说听起来很合理,而且我们已经有了一个我不应该Task的一次性对象(Dispose)。

很快,您可以删除using语句并返回IQueryable

答案 1 :(得分:0)

您应该将方法Select的类型从void更改为IEnumerable<Good>,以便能够返回某些内容。同时使用.ToList将结果具体化为List

internal IEnumerable<Good> Select()
{
    using (GoodsContext context = new GoodsContext())
    {
        var items = (from Items in context.Goods
                     select Items).ToList();
        return items;
    }
}

答案 2 :(得分:0)

Select方法的返回类型更改为List<Good>
然后&#34;实现&#34;结果列在数据列表中,您不会依赖DataContext

internal List<Good> Select()
{
    using (GoodsContext context = new GoodsContext())
    {
        return context.Goods.Select(items => items).ToList();
    }
}