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

本文关键字:自定义 字段 Server SQL net | 更新日期: 2023-09-27 18:07:58

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

该项目使用SQL server作为后端,使用linq-to-sql作为ORM,使用c# asp.net作为前端。

对此我有什么选择?

谢谢

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

这里有四个主要选项:

  • 实际上在运行时更改模式(DDL) -然而,几乎没有ORM会喜欢这样,并且通常有安全问题,因为你的"应用"帐户通常不应该重新定义数据库;但是,它确实避免了接下来两个
  • 中固有的"内部平台"效应。
  • 使用键值存储作为行,即Customer表可能具有"dfeeNumber" = 12345对的CustomerValues表(每个自定义键/值对一行)-但是工作起来很痛苦(而不是"get",这是每个实体的"get"answers"列表")
  • CustomFields单个单元格中使用单个大块数据(xml, json等)-再次,不是理想的工作方式,但更容易与主记录一起自动存储(缺点:迫使您加载所有自定义字段以读取单个)
  • 使用文档数据库(根本没有模式)-但是:没有ORM

我在不同的点上使用了所有4个。四个都可以工作。YMMV .

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

  1. 当您拥有灵活的数据库模式时,忘记linq-to-sql。当DB模式发生变化时,没有办法动态地更新linq-to-sql模型。

  2. 解决方案:

    • 保留一个额外的表,其中包含值所属的表名、列名、值等
    • 完全动态地改变你的表模式,每次他们添加一个字段。
    • 使用NOSQL解决方案,如mongoDB或Azure表存储。NOSQL解决方案不需要模式,可以动态更改。

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

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

您指的是EAV模型(entity-attribute-value)。

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