首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持动态"info“对象,C#/.NETMVC/SQL Server2008的最佳方式是什么?

保持动态"info“对象,C#/.NETMVC/SQL Server2008的最佳方式是什么?
EN

Stack Overflow用户
提问于 2011-08-23 19:22:44
回答 2查看 1K关注 0票数 2

这听起来像是白日梦,我想知道这是否可能。我希望能够获取一个名为info的C#动态对象,并将其持久化到数据库中(我目前使用的是SQL Server2008数据库)。

info对象是动态的,可以具有任意数量的属性:Id, Title, Content, DateExpires, DateAdded, Dateupdated, TypeOf等。

它的每个实例可以/将包含不同数量的属性,这取决于该实例的用途:博客帖子、分类广告、事件等。但是,每个info对象都会共享一组核心属性:Id, MemberId, TypeOf...

这个想法是,有一个中心表来存储所有动态信息对象,但允许我根据任何属性(对于某些对象可能不存在)进行查询。

例如,博客帖子。他们会有:Id, MemberId, DateAdded, Title, Content, TypeOf,等。事件应该是:Id, MemberId, Title, Content, TypeOf, DateOf, Recurrance, MinAge, MaxAge,等。

我想基于任何给定的info对象属性构建查询。

为什么?灵活性。如果我能让它正常工作,我就可以在我的web应用程序中使用info对象来处理未来的案例。如果这是一个非常糟糕的想法,请让我知道(以及为什么)。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-23 21:09:27

这是可能的,我见过许多像this...however这样的系统,由于这种“通用性质”,这些系统通常是最难维护的。这种方法本身并没有什么问题。只是它很难完成,而且在大多数情况下,它最终是一个很差的实现。

近年来,非关系数据库(如@Marc Gravell提到的文档数据库)迎头赶上,它们非常适合某些领域,但您需要确保它适合您的项目。

当你走上构建这个“通用数据库”的道路时,你是在牺牲我们认为理所当然的其他众所周知的技术。例如,关系数据库中的数据库优化是众所周知的,并且有许多工具可以很好地使用它们,只需很少的工作或根本不需要做任何工作。如果你突然走了一条不同的道路,你习惯的工具可能不起作用,最终要么构建你自己的工具来弥补不起作用的东西(或者购买/选择一些深奥的工具)。

根据您项目的规模,明智的做法是构建一两个您认为常见的系统,然后尝试查看它们是否像您想象的那样常见。

票数 2
EN

Stack Overflow用户

发布于 2011-08-23 19:37:50

您可以为通用属性使用“基础”表,为其他属性使用属性名称-值表。含义:

代码语言:javascript
复制
Table Info
  int Id (PK) (FK),
  int MemberId,
  Date DateAdded //etc...

Table Properties
  int InfoId (PK),
  varchar PropertyName (PK),
  varchar PropertyValue,
  string PropertyType //optionaly store information about the type of property

查询后,您可以使用反射将属性从(名称,值)对转换为正确的属性。

也就是说,我认为这是一个非常糟糕的想法,有几个原因:

这会进一步增加你的CRUD逻辑的复杂性,你的域模型中没有定义良好的实体,我不这么认为,like

  • validation更困难--例如,你必须手动验证Post没有一个叫做Recurrance

  • 的属性。

只有当您确实需要这种灵活性时,我才会使用这种方法-例如:如果用户可以选择保存您事先不知道的自定义属性。

否则,如果您知道您的实体仅限于PostEventEmployee等,我将仅限于此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7160218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档