【发布时间】:2013-06-18 14:21:09
【问题描述】:
我正在寻找一些建议,可能没有硬性和快速的答案,但任何想法都值得赞赏。应用非常典型。它是一个 c# 代码,目前使用的是 VS2010。除其他外,此代码用于从模型向最终用户提供数据。该模型本身基于一些已知数据在固定点(“立方体”)的各种参数和设置。在标准编程实践中,用户通过公共“get”函数访问数据,这些函数又依赖于私有成员变量,例如已知数据和设置。到目前为止,标准。现在我想将向用户提供这些数据的类保存到一个 sql 数据库中——主要是这样所有用户都可以共享相同的数据(或更准确地说是模型生成的数据)。
当然,我可以只取类的每个成员变量,然后使用 sql 数据库将它们写入 db 并从中重新实例化类。但我不想错过 .net 和 c# 提供的所有好东西。所以我想做的是序列化对象并使用 linq to sql 将其喷射到数据库中。 linq to sql 部分很简单,但在序列化方面我是个新手,对此我有点担心/困惑。似乎很明显的事情是将对象格式化为 xml 并将其作为 sql 数据类型“xml”的表中的列写入数据库。但这给我留下了几个问题。
据我了解,标准 XMLserializer 只会将类的公共成员写入 xml。这对我来说似乎是一个非首发,因为我的课程设计是基于保持大部分课程的私密性(与所有公共成员一起编写课程超出了我的经验 - 谁这样做?)。这使我考虑了 DataContractSerializer,您可以在其中选择用于序列化的变量。然而,这似乎有一些 WCF 依赖项,我想知道使用它的潜在缺点是什么。此外还有 SoapFormatter,它似乎在 Web 应用程序和 JSON 中更为流行。我并没有真正考虑这些,但也许我应该考虑?也许有更好的方法来解决这个问题?也许有点冗长,但希望所有上下文都可以提供帮助,以便人们可以给我一些建议。
【问题讨论】:
-
您是否考虑过创建一个映射类来接受您的模型之一并明确存在将其映射到数据库和从数据库映射出来?
-
是的——我之前做过类似的事情,为每个成员单独写入数据库——增加了一些令人讨厌的延迟。但是我想您实际上可以将映射器作为您建议的“定制序列化程序”,只需将所有内容集中到一个 blob 中并将其转储到数据库中。我基本上很懒,想使用内置功能。
-
看看 Dapper,它是一个轻量级 ORM,往往比 LinqToSQL 或大多数其他 ORM 更快。code.google.com/p/dapper-dot-net
-
谢谢,一定会试一试的。
标签: c# sql xml serialization datacontractserializer