如何使用C#将字典保存到数据库中?

我一直在使用以下方式将字典保存到数据库中:

  1. 将字典转换为XML。
  2. 将此XML传递给SP(存储过程)。
  3. 在SP中使用:

    Select Key1, Value1 into #TempTable FROM OPENXML(@handle, '//ValueSet/Values', 1) WITH ( key1 VARCHAR(MAX), value1 varchar(100) ) 
  4. 完成。

有没有办法将字典保存到数据库而不将其转换为XML?

这取决于……

  • 您希望存储数据:执行此操作的最快方式(实现和性能)是通过二进制序列化(例如协议缓冲区 )。 但是,select不能读取数据,每个需要读取数据的应用程序必须使用相同的序列化(如果它存在于相同的技术/语言中)。 从我的角度来看,它打破了存储在SQL数据库中目的

  • 您希望人类可以读取数据: XML是一种选择,而不是那么快,有点难以阅读,但仍然无法查询。 但是,实施起来非常快。 您也可以将结果转储到文件中,它仍然可读。 此外,您可以与其他应用程序共享数据,因为XML是一种广泛使用的格式。

  • 您希望数据可查询。 根据您的方式,实施起来可能并不容易。 您需要两个表(一个用于键,一个用于值)。 然后你可以编写自己的自定义映射代码来将列映射到属性,或者你可以使用框架将对象映射到像Entity framework或NHibernate这样的表。

虽然实体或NHibernate对于一个小问题可能看起来有点巨大的瑞士刀,但在内部构建一些专业知识总是很有趣,因为内部概念可以重复使用,并且一旦你有了工作设置它就能真正加速开发。

Serialize Dictionary,并存储二进制数据。

然后将数据反序列化为Dictionary

Tutorial1 Tutorial2

使用foreach语句遍历字典。