在数据库列中存储对象

时间:2016-04-07 12:04:18

标签: c# sql-server entity-framework-6

我正在使用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);
}

2 个答案:

答案 0 :(得分:0)

如果您想存储任何可以序列化对象的对象,然后将它们存储在数据库中,您也可以通过反序列化来检索对象。

答案 1 :(得分:0)

请不要这样做。实体 - 属性 - 值/一个真实查找表是数据库开发中的反模式的原因。

  • 包含多个不同列表重叠的一个表很难有效索引。
  • 执行有效条目的业务逻辑几乎不可能
  • 将所有值存储为字符串需要在数据类型之间来回进行大量的转换。这带来了非常重要的性能成本。

请实施各个表来存储每种单独的列表。为它们分配正确的列和数据类型,并设置基本数据访问类来读取它们。您的代码将更快,更可靠,更易于维护,并且您会发现它不会花费很长时间来设置。