0

我有一个需要存储来自表单动态字段的数据的表。在使用过程中,最终用户应该说出他将输入的数据类型(文本、数字、日期时间等)并输入值。

UI 已准备就绪,当他们确定类型时,输入会更改为正确的格式。现在,我想知道如何将其存储到数据库中。

我应该为每种类型设置一列并将值仅存储在右列中吗?

或者我可以有一个类型的列TEXT,存储在那里并在读回时进行转换。

ps:我将有另一列来保存存储的值的类型,例如枚举器值。

PPS:我正在使用 C# 读取数据并将其写入 SQL Server。

谢谢

4

1 回答 1

1

我认为最好的方法是将值序列化并将其存储为文本。然后您可以在您的 EF 实体中创建计算属性,以将其从文本反序列化为正确的类型

internal class Program
{
    private static void Main(string[] args)
    {
        var myEntity = new MyEntity();
        var someDateTime = DateTime.Now;

        myEntity.DynamicDataValue = someDateTime;

        var someDateTime2 = (DateTime) myEntity.DynamicDataValue;
        Console.WriteLine(someDateTime2.AddHours(1));
    }


    public class MyEntity
    {
        public string DynamicData { get; set; }
        public string DynamicDataType { get; set; }

        [NotMapped]
        public object DynamicDataValue
        {
            get => JsonConvert.DeserializeObject(DynamicData, Type.GetType(DynamicDataType));
            set
            {
                DynamicData = JsonConvert.SerializeObject(value);
                DynamicDataType = value.GetType().FullName;
            }
        }
    }
}
于 2019-02-18T14:22:56.380 回答