C# 如何在SQL Server中创建一个列来保存不同类型的值

C# 如何在SQL Server中创建一个列来保存不同类型的值,c#,.net,sql-server-2012,C#,.net,Sql Server 2012,我有一个表,需要存储表单动态字段中的数据。在使用过程中,最终用户应该说出他将输入文本、数字、日期时间等的数据类型,然后输入值 UI已经准备好,当他们决定类型时,输入将更改为正确的格式。现在,我想知道如何将其存储到数据库中 我应该为每种类型设置一列,并且只将值存储在右列中吗 或者我可以有一个类似文本类型的列,存储在那里并在读回时转换 ps:我将有另一列来保存存储的值的类型,比如枚举值 PPS:我正在使用C读取数据并将其写入SQL Server 谢谢我认为最好的方法是序列化值并将其存储为文本。然后,

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

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

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

或者我可以有一个类似文本类型的列,存储在那里并在读回时转换

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

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


谢谢

我认为最好的方法是序列化值并将其存储为文本。然后,您可以在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;
            }
        }
    }
}

您可以使用sql_变量类型的单个列。但是,为不同的行使用不同的数据类型可能是一个数据库模型设计缺陷。您可以将所有内容序列化为字符串(例如JSON)并将其存储在NVARCHARMAX列中,或者将所有内容序列化为二进制格式并使用VARBINARYMAX进行存储。不要使用文本-它早就被弃用了!看看Thank@AlexK,但我真的认为每个专栏都有一张桌子会很疯狂,不是吗?这对我来说是个好办法。你能将HTML作为内容存储在value属性中吗?HTML只是字符串,所以我在等待我们团队的认可。很快他们会回答我,如果他们争论或接受,我会在这里回答。