C# 在数据库中存储对象

C# 在数据库中存储对象,c#,.net,sql-server,database,serialization,C#,.net,Sql Server,Database,Serialization,我将SQL Server 2008与NHibernate一起用于一个应用程序。在应用程序中,我需要创建一个信息类的多个对象,并在多个地方使用它。我还需要将该对象存储在数据库中 有多种类型的信息类 要存储Info类的这些对象,我有两个选项 存储类的序列化obejct 将该类的详细信息存储为字符串 与将序列化对象的值存储为多个字符串相比,将其存储在数据库中的优势是什么 -Ram我肯定会存储记录和字段,而不仅仅是表示对象当前状态的字节块(二进制、文本或xml) 当然,这取决于业务实体的复杂性(在您

我将SQL Server 2008与NHibernate一起用于一个应用程序。在应用程序中,我需要创建一个信息类的多个对象,并在多个地方使用它。我还需要将该对象存储在数据库中

有多种类型的信息类

要存储Info类的这些对象,我有两个选项

  • 存储类的序列化obejct
  • 将该类的详细信息存储为字符串
与将序列化对象的值存储为多个字符串相比,将其存储在数据库中的优势是什么


-Ram

我肯定会存储记录和字段,而不仅仅是表示对象当前状态的字节块(二进制、文本或xml)

当然,这取决于业务实体的复杂性(在您的例子中是Info类),但我确实会避免将它的序列化版本保存在1列中


如果将所有属性分解为字段,则可以更好地查询具有特定值的记录,并且可以更轻松地处理新列和发布。

我肯定会存储记录和字段,而不仅仅是表示对象当前状态的字节块(二进制、文本或xml)

当然,这取决于业务实体的复杂性(在您的例子中是Info类),但我确实会避免将它的序列化版本保存在1列中


如果将所有属性分解为字段,则可以更好地查询具有特定值的记录,并且可以更轻松地处理新列和发布。

如果将序列化对象存储到数据库中:

  • 您不必从部分数据重建它(即,编写您自己的反序列化程序如果行为是默认的,则从部分数据创建对象)
  • 必须“手动”创建对象
  • 在某些情况下可能会更快
  • 存储冗余的基础结构数据
  • 您可以选择多种格式(XML、自定义格式、BLOB)
  • 您已经完全准备好了可以在任何地方处理的序列化对象(通过网络发送,存储在磁盘中)
如果要存储多个字符串,请执行以下操作:

  • 需要“手动”构建对象
  • 可以在不同的场景中使用数据库数据(从.net,构建其他结构,如多维数据集)
  • 数据更加紧凑
  • 可以以关系规范化的形式存储数据,这(几乎)总是一种好的做法
  • 查询数据
  • 以及数据的更全面的使用

我肯定会使用关系规范化表单来存储字符串,然后在.net中构建相应的类生成器。

如果将序列化对象存储到数据库中:

  • 您不必从部分数据重建它(即,编写您自己的反序列化程序如果行为是默认的,则从部分数据创建对象)
  • 必须“手动”创建对象
  • 在某些情况下可能会更快
  • 存储冗余的基础结构数据
  • 您可以选择多种格式(XML、自定义格式、BLOB)
  • 您已经完全准备好了可以在任何地方处理的序列化对象(通过网络发送,存储在磁盘中)
如果要存储多个字符串,请执行以下操作:

  • 需要“手动”构建对象
  • 可以在不同的场景中使用数据库数据(从.net,构建其他结构,如多维数据集)
  • 数据更加紧凑
  • 可以以关系规范化的形式存储数据,这(几乎)总是一种好的做法
  • 查询数据
  • 以及数据的更全面的使用

我肯定会使用关系规范化表单来存储字符串,然后在.net中构建相应的类生成器。

将对象存储为序列化流的最常见问题是,一旦存储对象,就很难搜索其属性,然而,如果对象的每个属性都显式存储在其自己的强类型列中,则可以为其索引以进行搜索,并且您可以获得强类型存储的完整性好处


但是,至少如果对象在SQL中被XmlSerialized为XML列,您可以使用和等技术来简化搜索。

将对象存储为序列化流的最常见问题是,一旦存储对象,就很难搜索其属性,然而,如果对象的每个属性都显式存储在其自己的强类型列中,则可以为其索引以进行搜索,并且您可以获得强类型存储的完整性好处

但是,至少如果对象在SQL中被XmlSerialized为XML列,您可以使用和等技术来简化搜索。

序列化obejct(XML) 如果将类存储为XML。您将能够使用Xquery搜索类的上下文。如果您想搜索(有条件或无条件),这种方法是绝对有效的。此外,还可以在XML列上创建索引。XML索引将使您的应用程序更快

作为字符串 如果您没有业务登录来查看类的内容

序列化obejct(XML) 如果将类存储为XML。您将能够使用Xquery搜索类的上下文。如果您想搜索(有条件或无条件),这种方法是绝对有效的。此外,还可以在XML列上创建索引。XML索引将使您的应用程序更快

作为字符串
如果您没有业务登录来查看类的内容

您是否考虑过使用NHibernate或EntityFramework之类的OR映射器而不是创建您自己的持久层?@Fionn-我们也在使用NHibernate。您是否考虑过使用NHibernate或EntityFramework之类的OR映射器而不是创建您自己的持久层?@Fionn-我们也在使用NHibernate。例如,您