如何在SQL Server中创建一列以保存不同类型的值

时间:2019-02-18 13:54:00

标签: c# .net sql-server-2012

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

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

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

或者我是否可以将一列类型为TEXT的列存储在那里并在读回时进行转换。

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

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

谢谢

1 个答案:

答案 0 :(得分: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;
            }
        }
    }
}