存储动态字段

时间:2016-01-30 09:24:23

标签: c# asp.net-mvc entity-framework

我正在开发一个c#MVC5 EF6项目,我面临以下情况。我有一个带有一些默认属性的项目模型:

public class project
{
    public int Id { get; set; }
    public string Code { get; set; }
    public string Description { get; set; }
}

现在我想为用户提供添加额外字段的选项。因为我不知道他们将添加多少字段以及他们添加了哪种类型的字段,所以我不能像这样在课堂上添加免费字段:

public int FreeInt1 { get; set; }
public int FreeInt2 { get; set; }
public string FreeString1 {get; set; }
// etc. (let's hope we have enough fields)

因此,我认为应该动态创建字段(并按项目存储)。我在考虑两种可能的解决方案:

  1. 在一种Key - Value结构中创建一个额外的表ProjectFields,如下图所示:
  2. enter image description here

    使用这种方法时,如果你有数千个项目,至少有10个额外的字段,那么这一切都会很快加起来。

    1. 向我的项目类public string ProjectFields { get; set; }添加一个额外的字符串属性,并创建逻辑以在XML或Json字符串中添加额外字段并将其保存到ProjectFields字段。
    2. 我真的不知道我是否正在朝着正确的方向思考,或者我是否应该以另一种方式处理这种情况?

1 个答案:

答案 0 :(得分:-1)

为用户提供添加列的接口,将其添加的列名存储在数组中并使用以下逻辑

//if we have an array
// array = ["ID","name","IP","active"];
foreach(var item as array)
{
 sql = "alter table [TABLENAME] add [item] int default 0 NOT NULL"
//run this sql query using sql command and see the magic
}