2016-04-07 25 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

文字列の長さを定義するが、文字列の代わりに 'string'の代わりに' object'を使用する点は何ですか?文字列を格納する場合は、 '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

しないでください。エンティティ属性値/ 1つの真のルックアップテーブルは、データベース開発における反パターンである。

  • 複数の異なるリストが重なっている1つのテーブルは、効率的にインデックスを作成することが非常に困難です。
  • 有効なエントリを強制するビジネスロジックはほとんど不可能になります。
  • すべての値を文字列として格納するには、データ型間で多くのキャストが必要です。これは、パフォーマンスにはあまり意味がありません。

個々のテーブルを実装して、個々の種類のリストを格納してください。それらに正しい列とデータ型を割り当て、基本的なデータアクセスクラスを設定して読み取ります。あなたのコードは、より速く、より信頼性が高く、メンテナンスが容易になり、セットアップにはそれほど時間がかかりません。

関連する問題