【问题标题】:binding winforms to database by entity framework 6通过实体框架6将winforms绑定到数据库
【发布时间】:2014-12-31 13:09:42
【问题描述】:

场景很简单:

  1. 我有 EF6 DbContext MyDbContext
  2. 我有带列表框的表单
  3. 从DB绑定数据到listbox的代码如下:

    dbContext = new MyDBContext();
    listBox1.DataSource = dbContext.Experiments.Select(a => a.Name + "," + a.ModificationDate.Second).ToList();
    
  4. 我有使用代码向数据库表添加一行的按钮:

     dbContext.Experiments.Add(new Models.Experiment()
        {
            CreationDate = DateTime.Now,
            ModificationDate = DateTime.Now,
            Description = "Test" + DateTime.Now.Second,
            Name = "test" + DateTime.Now.Second
        });
        dbContext.SaveChanges();
    

现在我想自动刷新列表框中的位置。最好的方法是什么?我知道我可以从第 3 点重写代码,但我希望将其全部进行双向绑定并自动更新

【问题讨论】:

  • 第 3 点的代码将 DataSource 设置为普通列表,如果您希望绑定以两种方式工作,则需要将 DataSource 设置为支持该功能的集合,例如BindingList,因此它可以引发更新控件的事件

标签: c# .net winforms entity-framework entity-framework-6


【解决方案1】:

我认为“数据绑定”是这里的关键词。通常在 WinForms 中,BindingList<T>BindingSource 等类提供两种方式的投标。问题是如何将它们与 EF 一起使用。我认为扩展方法ToBindingList 在这里很有用。但是,我没有很多使用它的经验。我建议你看看下面的文章:Entity Framework Databinding with WinForms。另外,如果你在stackoverflow上搜索ToBindingList EntityFramework,你会发现很多相关的问题。

更新

我做了一个小测试,发现一个潜在的问题。如果您使用相同的数据上下文(相同的 DbContext 类实例),控件和 EF 之间的自动同步将起作用。这意味着一个上下文可能有很长的生命周期,这是不推荐的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 2023-03-25
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多