Как создать столбец в SQL Server для хранения различных типов значений - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть таблица, которая должна хранить данные из динамических полей формы.Во время использования конечный пользователь должен сказать тип данных, которые он будет вводить (текстовые, числовые, даты и т. Д.) И ввести значение.

Пользовательский интерфейс готов, и когда он определит тип, ввод изменитсяв правильный формат.Теперь я хочу знать, как я могу сохранить его в базе данных.

Должен ли я иметь один столбец для каждого типа и хранить значение только в правом столбце?

Или я могу иметь столбецс типом, подобным TEXT, сохраняйте его там и конвертируйте при обратном чтении.

ps: у меня будет другой столбец для хранения типа сохраненного значения, например, значения перечислителя.

PPS: я использую C # для чтения данных и записи их в SQL Server.

Спасибо

1 Ответ

0 голосов
/ 18 февраля 2019

Я думаю, что лучший способ - это сериализовать значение и сохранить его в виде текста.Затем вы можете сделать вычисляемое свойство в вашей сущности 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;
            }
        }
    }
}
...