2016-04-07 176 views
0

我正在使用實體框架,並計劃在我的數據庫中可以存儲任何數據(基本上是對象類型)的表中的一個表中有一列,所以我創建了一個類,但是它沒有不會將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。你是否想解決一些其他的問題,並認爲用'object'替換'string'可能有幫助? –

+0

我認爲它是[sql_variant](https://msdn.microsoft.com/en-us/library/ms173829.aspx)。 –

+1

你想創建一個鍵/值表嗎?這被認爲是反模式。你也不需要它。您可以使用SQL Server中的稀疏列來定義大量的列(> 30000)。如果只需要少數幾列,這將節省大量的空間。如果您只想檢索單個實體的屬性,則還可以避免搜索整個表格 –

回答

0

就在,如果你想存儲可以序列對象的任何對象,然後將它們存儲在數據庫中,你也可以通過deserializiation檢索對象的情況。

+0

您可以通過編輯這個簡短示例來詳細說明您在這裏建議的內容回答? – ManoDestra

0

請不要這樣做。出於某種原因,實體 - 屬性 - 值/一個真正的查找表是數據庫開發中的反模式。

  • 包含多個不同列表重疊的表格很難有效地進行索引。
  • 執行有效條目的業務邏輯變得幾乎不可能
  • 將所有值存儲爲字符串需要在數據類型之間來回轉換大量數據。這是一個不平凡的性能成本。

請執行單獨的表來存儲每個單獨的列表。爲它們分配正確的列和數據類型,並設置基本數據訪問類來讀取它們。您的代碼將更快,更可靠,更易於維護,並且您會發現不需要很長時間才能設置。