. 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作为前端。
对此我有什么选择?
谢谢
这里有四个主要选项:
- 实际上在运行时更改模式(DDL) -然而,几乎没有ORM会喜欢这样,并且通常有安全问题,因为你的"应用"帐户通常不应该重新定义数据库;但是,它确实避免了接下来两个 中固有的"内部平台"效应。
- 使用键值存储作为行,即
Customer
表可能具有"dfeeNumber"
=12345
对的CustomerValues
表(每个自定义键/值对一行)-但是工作起来很痛苦(而不是"get",这是每个实体的"get"answers"列表") - 在
CustomFields
单个单元格中使用单个大块数据(xml, json等)-再次,不是理想的工作方式,但更容易与主记录一起自动存储(缺点:迫使您加载所有自定义字段以读取单个) - 使用文档数据库(根本没有模式)-但是:没有ORM
我在不同的点上使用了所有4个。四个都可以工作。YMMV .
我现在做的项目也有类似的情况。
-
当您拥有灵活的数据库模式时,忘记linq-to-sql。当DB模式发生变化时,没有办法动态地更新linq-to-sql模型。
-
解决方案:
- 保留一个额外的表,其中包含值所属的表名、列名、值等
- 完全动态地改变你的表模式,每次他们添加一个字段。
- 使用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