私ができる最良の方法を私のシナリオについて説明しようとします。私は自分のデータベースに次のテーブルを持っている:データベースから動的プロパティを読み取る方法
Products{ProductId, CategoryId ...}
Categories{CategoryId ...}
CategoryProperties{CategoryPropertyId, CategoryId, Name ...}
PropertyValues{ProductId, CategoryPropertyId, Value ...}
ので、目標は、いくつかのカテゴリに属し、各カテゴリは「PropertyValues」テーブル内の値を持つプロパティの「n」の番号を持つことができる製品のリストを持っていることです。 HDDのカテゴリについては
intel i7 | CPU | Model | Socket | L1 Cash | L2 Cahs | etc.
:
samsung F3 | HDD | Model | Speed | GB | etc.
CPUカテゴリで
:私はので、私はいつも、データベースから異なる結果を得ることができる「区分」に基づいてデータを返すクエリを持っています
結果として私のクエリのカテゴリに基づいて、私は常に異なる列番号と名前を得ることができます。データベースアクセスの場合は、結果を返すストアドプロシージャへの単純なADO.NET呼び出しを使用します。 しかし、クエリの結果は本質的に動的なので、私はこのデータを読む良い方法は何か分かりません。
私は、Product
エンティティをしたが、、私はそれが本当に:( 私はProduct
エンティティを作成し、他のエンティティ継承Product
PcCase
、Camera
、Hdd
、Cpu
などを作ることができると考え作る方法を混乱していますGraphicCard
、MobilePhone
、Gps
など
が、私は200以上のエンティティドメイン内でこれを終了することができますので、それは愚かだとを考える。
あなたはこの状況で何をしますか?
これを読む方法と置く場所力学的性質?
UPDATE - いくつかのソリューション
に基づくすべての権利は、私はいくつかの解決策に来DataTable
オブジェクトを使用するDictionary
と@Tim Schmelterアイデアのため提案を@millimoose。
これは動作しますが、データを読み取って表示できます。
でも、私よりもスマートな人たちから助言が必要です私はこの良いことをしましたか、これをより良く扱うべきか、私はいくつか作られましたスパゲティコード。だからここに私がやったこと :
public class Product
{
public Product()
{
this.DynamicProperties = new List<Dictionary<string, string>>();
}
public List<Dictionary<string, string>> DynamicProperties { get; set; }
}
...
List<Product> products = new List<Product>();
...
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
DataTable t = new DataTable();
a.Fill(t);
Product p = null;
foreach (DataRow row in t.Rows)
{
p = new Product();
foreach (DataColumn col in t.Columns)
{
string property = col.ColumnName.ToString();
string propertyValue = row[col.ColumnName].ToString();
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add(property, propertyValue);
p.DynamicProperties.Add(dictionary);
}
products.Add(p);
}
}
:あなたは、
やや関連する質問をのようなものを行うことができます '(またはそのようなもの)? –
millimoose
最も簡単なアプローチは、 'DataTables'を使うことです。次に、SQLクエリと 'SqlDataAdapter'テーブルが必要です。 –
@millimoose私は最初に 'Dictionary'を考えました。しかし、私はこのシナリオのためのいくつかの異なる解決策があるのを知ることを知らない。あるいは、「辞書」は実際には唯一の、あるいは最良の解決策です。 – 1110