【问题标题】:Custom Fields in .Net and SQL Server.Net 和 SQL Server 中的自定义字段
【发布时间】:2011-11-13 14:15:06
【问题描述】:

我们的项目需要自定义字段。我们有一些标准字段,每个客户都希望能够添加自己的自定义字段。目前我对它在 UI 中的工作方式不感兴趣,但我想知道后端存储和检索数据的选项是什么。我最后一次做这样的事情是大约 10 年前在 VB6 中,所以我很想知道在当今的 .Net 世界中解决这个问题的选项是什么。

该项目使用 SQL 服务器作为后端,使用 linq-to-sql 作为 ORM 和 C# asp.net 前端。

对此我有什么选择?

谢谢

【问题讨论】:

  • 我不知道任何 ORM 在运行时知道架构更改

标签: c# .net asp.net sql sql-server


【解决方案1】:

这里有四个主要选项:

  • 实际上在运行时更改架构 (DDL) - 然而,几乎没有 ORM 会喜欢这样,并且通常存在安全问题,因为您的“应用程序”帐户通常不应该重新定义数据库;但是,它确实避免了接下来两个固有的“内部平台”效应
  • 将键值存储用作行,即Customer 表可能有一个CustomerValues 表,其中包含"dfeeNumber"=12345 之类的对(每个自定义键/值对一行) - 但很痛苦使用(而不是“get”,这是每个实体的“get”和“list”)
  • CustomFields 单个单元格中使用单个数据块(xml、json 等) - 同样,不适合使用,但更容易与主记录一起原子存储(缺点:迫使您 加载所有自定义字段以读取单个)
  • 使用文档数据库(根本没有架构)- 但是:没有 ORM

我在不同的地方使用了所有 4 个。 4个都可以工作。 YMMV。

【讨论】:

  • +1 我们让中间两个在少数地方实时运行在我们的代码上——如果它们的规模得到控制,它们都可以很好地工作。最后一个很有趣。个人而言,我希望第一个永远不会完成。
【解决方案2】:

我现在正在做的项目也有类似的情况。

  1. 当您拥有灵活的数据库架构时,请忘记 linq-to-sql。当数据库架构发生变化时,无法即时更新 linq-to-sql 模型。

  2. 解决方案:

    • 保留一个额外的表,其中包含值所属的表名、列名、值等
    • 每次添加字段时都会完全动态地更改您的表架构。
    • 使用 NOSQL 解决方案,例如 mongoDB 或 Azure 表存储。 NOSQL 解决方案不需要架构,可以随时更改。

这是一个方便的链接 2 阅读:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:10678084117056

【讨论】:

    【解决方案3】:

    您指的是 EAV 模型(实体-属性-值)。

    这是一篇文章:http://hanssens.org/post/Generic-Entity-Attribute-Value-Model-e28093-A-POCO-Implementation.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-06
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多