【问题标题】:How to get data from database with Entity Framework?如何使用实体框架从数据库中获取数据?
【发布时间】:2014-01-13 18:50:22
【问题描述】:

使用 c#,net.4.5 与 2012

我正在尝试使用实体框架从数据库中获取数据。

最初的想法是使用如下代码 - 它必须允许在 dataGridView 中添加、删除和更新条目,而不仅仅是使用 context.SaveChanges() 保存更改(如果我没记错的话,来自 ObjectSet 的方法)

using (LibraryEntities context = new LibraryEntities())
{
            var query = (from c in context.Book select c).First();
            DataGridView dgv = new DataGridView();
            dgv.DataSource = context.Book;
}

结果 - 异常

不支持直接将数据绑定到存储查询(DbSet、DbQuery、DbSqlQuery)...

然后我尝试稍微修改一下代码:

using (LibraryEntities context = new LibraryEntities())
{
    var query = (from c in context.Book select c).First();
    DataGridView dgv = new DataGridView();
    dgv.DataSource = query;
}

但有相同的异常问题

不支持直接将数据绑定到存储查询(DbSet、DbQuery、DbSqlQuery)...

最后尝试全部转换为List():

using (LibraryLib.LibraryEntities context = new LibraryLib.LibraryEntities())
{
    DataGridView dgv = new DataGridView();
    dgv.DataSource = (from c in context.Book select c).ToList();
}

正如预期的那样,我在 DataGridView 中获得了所有 db 条目,但我无法添加、更新和删除任何条目。

问题是 - 我如何更改 dataGridView 中的 db,而不是使用 DbContext.SaveChanges() 保存它

【问题讨论】:

  • @ElliotTereschuk,SO 是一个仅限英文的网站。谷歌提供这个作为翻译Hey. Try to consider the ready examples are not quite understand everything
  • @paqogomez 谢谢,我知道 - 这是因为在这里很少见到乌克兰人 ;)
  • @Elliot Tereschuk Привіт, а що саме нечітко описано? / HI,有什么问题没有正确描述?
  • @Elliot Tereschuk。 так, але коли я приводжу до колекції, я отримую результат。 проблема в тому。 що я не можу видалити або додати запис до DataGridView В останньому варіанті - все добре працює。 Що хочу я - пернести всю базу даних до DataGridView。 редагувати її (видаляти міняти значення додавати рядки. тощо)。 Апотім повністю зберегти。 Як це зробити?, адже спробувавши так як описано в книжці - видає виключення。
  • @Elliot Tereschuk。是的,但是当我尝试收集时 - 一切正常,但我无法在 DataGridView 中做任何事情。我想要什么 - 它是在DataGridView 中加载所有数据库,而不是修改其实体并更改它们(意味着添加、删除或更新),而不仅仅是使用DbContext.SaveChanges() 保存它 - 就像我看到的许多教程中所述 - 但我由于存在异常而不能

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


【解决方案1】:

是winforms吗? 如果是,则必须使用 BindingSource 链接数据

        BindingSource bs = new BindingSource();
        bs.DataSource = typeof(Book); // Book is a type of your Entity class

        db.Book.ToList().ForEach(n => bs.Add(n)); 
        dgv.DataSource = bs;

现在可以编辑了。和 存储更改只需调用 db.SaveChanges();

您将 List 分配给 DataGrid 的方式对 WPF 有效。去那里移民怎么办?

【讨论】:

  • 是的,我使用 WinForms,我正在考虑 wpf,但目前我只是在学习(在空闲时间)c#。首先尝试了解主要里程碑。你的提议很完美——据我所知,我必须在使用之前为数据添加一些“缓冲区”。谢谢
【解决方案2】:

我建议将存储库模式与 unitofwork 模式一起使用,这意味着存储库类将处理所有 CRUD 操作和工作单元类以一起提交所有更改。

【讨论】:

  • 您能否提供任何链接以获取有关此模式的一些教程或其他信息,老实说 - 从来没有听说过这个
  • codeproject.com/Articles/37155/… 对于 Unitofwork - 创建 T4 模板
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2014-12-20
  • 2013-01-18
  • 2018-01-02
  • 1970-01-01
相关资源
最近更新 更多