我正在尝试使用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;
}
}
答案 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();
}
}