【问题标题】:How to transfer the data from Data Base to VIEW via PRESENTER?如何通过 PRESENTER 将数据从数据库传输到 VIEW?
【发布时间】:2015-12-25 08:41:09
【问题描述】:

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

【问题讨论】:

    标签: c# winforms entity-framework linq mvp


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答!我是 C# 新手,对IQueryableTaskDispose 等不太擅长。任何其他信息都会非常有用。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您应该将方法 Select 的类型从 void 更改为 IEnumerable&lt;Good&gt; 才能返回某些内容。还可以使用.ToList 将结果具体化为List

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

      【讨论】:

      • 现在运行良好!谢谢!这是解决问题的最佳方法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多