如何一次性同步内存中的集合与其后备数据库表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何一次性同步内存中的集合与其后备数据库表相关的知识,希望对你有一定的参考价值。

我有一个简单的问题。我在内存中实例化了一个 List<item>DbSet<item> (它代表一个数据库表)。然后,我的应用程序对列表进行更改 -- 增加一些项目,删除其他项目。

现在,我想把这些更改批量同步回数据库中(即从更改后的列表中更新表)。一气呵成 --- 不是一次一个项目。

我想让支持表成为我的清单的确切副本。

目前,我不得不分两个丑陋的步骤来做-------。

  1. 从表中删除不在列表中的项目。
  2. 将列表中的项目添加到表格中(如果它们还没有在表格中)。

在下面的代码中 db.Items 是我 DbSet<item> (代表数据库表)和 List.Items 是我的内存 List<item>

using(var db = new MyDatabase())   
      
      db.RemoveRange(db.Items.Where(item => !List.Items.Contains(item)));  

      db.AddRange(List.Items.Where(item => !db.Items.Contains(item)));  

      db.SaveChanges();   

难道就没有一个更简单的、一行字的调用,可以同步更改回来吗?

我必须提几个问题。

  1. 这个... db.UpdateRange(List.Items)db.Items.UpdateRange(List.Items) 调用并不像我在这里所说的那样,它们不会从数据库表中删除我从列表中删除的项目。他们不会从数据库表中删除我从列表中删除的项目。
  2. 我的提供者是微软的Sqlite提供者。
  3. 而这个问题=&gt。将C#对象阵列与数据库表同步 --- 与我的问题无关。

非常感谢你期待一个好的可靠的答案:)

以上是关于如何一次性同步内存中的集合与其后备数据库表的主要内容,如果未能解决你的问题,请参考以下文章

与其使用 single() 返回表中的一项,如何返回与列表中相同 ID 绑定的多个项?

Map集合 把map 集合 转成Set的方法

如何将文件表与SQL Server中的现有表链接

记录一次EFCore CodeFirst迁移实践,解决多个项目表结构同步更新问题

数据结构入门

如何使 C# 枚举与数据库中的表保持同步