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



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

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

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

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

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

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

这个问题很有趣。当然,可以将查询具体化并将其返回为IEnumerable,但我想知道将其返回成IQueryable的方法是什么,以允许进一步的筛选/排序等。我看到的唯一方法是而不是处理DbContext(显然返回的可查询对象保留了对它的引用),但它安全吗?然后我在谷歌上搜索了一下,发现了这个问题。我总是必须对我的DbContext对象调用Dispose()吗?没有。里面的解释对我来说听起来很合理,而且我们已经有了一个不应该使用的一次性对象(TaskDispose

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

Select方法的返回类型更改为List<Good>
然后将结果"具体化"到数据列表中,您将不依赖DataContext

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

您应该将方法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;
    }
}

最新更新