gpt4 book ai didi

C# ASP.NET Core 构建动态表单

转载 作者:太空狗 更新时间:2023-10-29 18:28:41 28 4
gpt4 key购买 nike

我想实现类似于 SharePoint online 的功能,即列表功能。我想创建动态列表添加新列等。用户可以填写表格并保存数据。

瓶颈是数据库,我很难理解应该如何构建它。

我正在考虑创建动态 SQL Server 表、列等,但这可能不是好的方法。有人可以建议数据库应该是什么样子吗?

我正在考虑创建一个名为 Lists 的表,并在其中存储 List 属性。然后与另一个名为 Fields 的表建立多对多关系,我可以在其中存储与特定表单相关的所有字段。多对多关系,因为某些字段对于所有表单都是通用的,例如:Id、CreatedBy、Created、Modified、ModifiedBy 等。现在困难的部分来了。我应该在哪里存储实际数据?我是否应该创建另一个名为 FormData 的表并将数据存储在其中?它与 ListsFields 表应该有什么关系?

最佳答案

NoSql 方法似乎是一种简单的方法。如果您仅将数据库视为不应该包含任何“业务”逻辑的 IO 设备,那么内存成本和内存读取/写入时间 (SSD) 变得更低这一事实 - 您将没有更多的选择来解决您的问题。

例如,您可以将字段的集合保存在一个对象中

{
"key": "form1",
"fields" : [ "Id", "CreatedAt" ]
}

基于该对象,您可以生成包含已创建字段列表或表单的 View 。您可以为包含 View 生成和数据处理所需的更多数据的字段引入自己的“对象”。

{
"key": "form1",
"fields" : [
{ "Name": "Id", "Type": "string" },
{ "Name" "CreatedAt", "Type": "DateTime" }
]
}

实际数据也可以保存在一个对象中

{
"formKey": "form1",
"Name": "FirstName LastName",
"CreatedAt": "2017-04-23T18:25:43.511Z"
}

在客户端,这些数据可以很容易地保存为 json 对象并发送到服务器。
在服务器端,您可以将该对象反序列化为 Dictionary<string, object>并以动态方式处理它

var formEntity = JsonConvert.DeserializeObject<Dictionary<string, object>>(requestBody);

var name = formEntity["Name"].ToString();

如果你紧紧依附于关系数据库,你可以在 NVARCHAR 列和一个标识列中保存“原始 json”。
对于处理数据,您将能够将其反序列化为 Dictionary<string, object> .
带字段对象 { "Name" "CreatedAt", "Type": "DateTime" }您可以将值转换为预期的类型以进行正确的验证和处理。

您将能够根据动态字段搜索数据并创建动态报告,用户可以在其中创建自己的报告。

因为字段结构不是动态的,您可以以关系方式保存表单和字段结构。以下是我对 sql server 数据库的建议。

CREATE TABLE Forms (
Id INT IDENTITY(1,1) NOT NULL
)

CREATE TABLE Field(
Id INT IDENTITY(1,1) NOT NULL,
Name NVARCHAR(30) NOT NULL,
TypeName NVARCHAR(30) NOT NULL, -- Or INT -> can represent SqlDbType enum in c#
)

-- many to many relation of Form and Fields
CREATE TABLE FormFields (
FormId INT NOT NULL,
FieldId INT NOT NULL,
PRIMARY KEY (FormId, FieldId)
)

-- because data is "dynamic" it should be saved as string (json format)
CREATE TABLE FormData(
Id INT IDENTITY(1,1) NOT NULL,
FormId INT NOT NULL,
Data NVARCHAR(MAX) NOT NULL, -- json format
)

并考虑使用 Microsoft 版本的 NoSql - DocumentDB

关于C# ASP.NET Core 构建动态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43652400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com