2016-04-07 3 views
0

Я использую Entity Framework и планирую иметь столбец в одной из таблицы в моей базе данных, где я могу хранить любые данные (в основном тип объекта), поэтому я создал класс и, тем не менее, он сделал В базу данных добавлены столбцы DefaultValue и MaxValue.Хранение объекта в столбце базы данных

public class AssetDataType 
{ 
    public AssetDataType() 
    { 
    } 

    public int Id { get; set; } 

    [Required, StringLength(100, MinimumLength = 1)] 
    public string Name { get; set; } 

    [Required, StringLength(100, MinimumLength = 1)] 
    public object DefaultValue { get; set; } 

    [StringLength(100, MinimumLength = 1)] 
    public object MaxValue { get; set; } 
} 

Как я могу добавить эти столбцы и хранить любые значения в том, что я отправляю код ниже, чтобы иметь представление о том, что я пытаюсь достичь.

protected override void Seed(AppContext context) 
{ 
    var assetAttributeType = AddOrUpdateAssetAttributeType(context, 
     new AssetAttributeType 
     { 
     Name = "Integer", 
     DefaultValue = 0, 
     MaxValue = int.MaxValue, 
     }); 

     types.Add(assetAttributeType.Name, assetAttributeType); 

    var assetAttributeType1 = AddOrUpdateAssetAttributeType(context, 
     new AssetAttributeType 
     { 
      Name = "Boolean", 
      DefaultValue = false, 
     }); 

     types.Add(assetAttributeType1.Name, assetAttributeType1); 
} 
+0

Какова точка определения длины строки, но с использованием 'object' вместо' string' в качестве типа? Если вы хотите сохранить строки, используйте тип 'string'. Если вы хотите хранить целые числа, используйте int или long. Вы пытаетесь решить какую-либо * другую проблему и решили, что замена 'string' на' object' может помочь? –

+0

Я думаю, что это [sql_variant] (https://msdn.microsoft.com/en-us/library/ms173829.aspx). –

+1

Вы пытаетесь создать таблицу ключей/значений? Это считается анти-шаблоном. Вы также не нуждаетесь в этом. Вы можете использовать разреженные столбцы в SQL Server для определения очень большого количества столбцов (> 30000). Это экономит * много * пространства, если требуется только несколько столбцов. Вы также избегаете поиска всей таблицы, если хотите получить только атрибуты одного объекта. –

ответ

0

Только в том случае, если вы хотите сохранить какие-либо объекты, которые можно сериализовать объекты, а затем хранить их в базе данных, также вы можете получить объект с помощью deserializiation.

+0

Можете ли вы подробнее рассказать о том, что вы предлагаете здесь, с помощью краткого примера, отредактировав это ответ? – ManoDestra

0

Пожалуйста, не делайте этого. Entity-Attribute-Value/One True Lookup Table - это анти-шаблоны в разработке баз данных.

  • Одна таблица, содержащая несколько перекрывающихся списков, очень трудно эффективно индексировать.
  • Бизнес-логика для принудительного ввода действительных записей становится практически невозможной
  • Сохранение всех значений в виде строк требует много переброски между типами данных. У него нетривиальная стоимость исполнения.

Пожалуйста, создайте отдельные таблицы для хранения каждого отдельного списка. Выделите их правильные столбцы и типы данных и настройте основные классы доступа к данным для их чтения. Ваш код будет быстрее, надежнее и проще в обслуживании, и вы обнаружите, что это не займет много времени, чтобы настроить.

Смежные вопросы