.Net和SQL Server中的自定义字段

时间:2011-09-09 07:58:47

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

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

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

我对此有何选择?

由于

3 个答案:

答案 0 :(得分:12)

这里有四个主要选项:

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

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

答案 1 :(得分:1)

我现在正在研究的项目情况类似。

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

  2. 解决方案:

    • 使用值所属的表名,列名,值等保留一个额外的表
    • 每次添加字段时,都会动态更改表架构。
    • 使用NongQL解决方案,如mongoDB或Azure表存储。 NOSQL解决方案不需要架构,可以即时更改。
  3. 这是一个方便的链接2:

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

答案 2 :(得分:0)

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

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