在.NET中为无架构数据库设计类是否有任何通用模式?

时间:2012-03-06 23:27:02

标签: c# nosql schemaless

我在C#中使用mongoDB做了一些工作,但我的所有代码仍处于开发阶段。我想知道人们在创建,更改和删除新属性时随着时间的推移发展其域类的有用模式。我很清楚,我需要对我所有存储的数据运行更新,或者确保我的域类知道如何处理旧的格式记录,但随着时间的推移,我可以想象如果一个类知道如何处理,这会变得混乱所有可能的表单格式。

我在想这个吗?这主要是使用良好的防御性编程吗?

1 个答案:

答案 0 :(得分:2)

  1. 向数据对象添加新属性非常简单。你刚才 添加它们。除非您担心这些属性为null 存在于数据库中的对象,您不必执行任何操作 其他。如果某些用户/机器使用您的旧版本 应用程序和您的类标记为 BsonIgnoreExtraElementsAttribute,他们甚至可能不需要更新 他们的软件。
  2. 删除过时的属性并非易事。您 只需在课程中删除它们。如果您的课程标有 BsonIgnoreExtraElementsAttribute,那么你甚至不必删除 它们在您的数据库中(例如,如果您的用户有几个 你的应用程序的版本)。
  3. 重命名类属性也很容易。 BsonElementAttribute构造函数有一个参数,因此您可以将其映射到数据库中的正确属性名称。
  4. 更改媒体资源类型可能需要您对自己进行更新 数据。但严重的是,您多久更改一次属性类型 生产中的字符串到int?
  5. 因此,在许多情况下,您甚至不需要对数据运行更新(除非您更改数据类型或属性影响索引)。另一点是添加BsonIgnoreExtraElementsAttribute通常是一种很好的做法,特别是如果您担心经常添加和/或删除属性。按照这种做法,您可以提供应用程序的较旧版本和较新版本,以使用所有版本的记录,享受“无模式”的好处。