Bu senaryoyu en iyi şekilde açıklamaya çalışacağım. Benim veritabanında aşağıdaki tablolar vardır: Veritabanından dinamik özellikler nasıl okunmalı
Products{ProductId, CategoryId ...}
Categories{CategoryId ...}
CategoryProperties{CategoryPropertyId, CategoryId, Name ...}
PropertyValues{ProductId, CategoryPropertyId, Value ...}
Yani amaç bazı kategoriye ait ve her kategori 'propertyvalues' tablosundaki değerlerle özelliklerinin 'n' sayıda olabilir hangi ürünlerin listesini sahip olmaktır. İşlemci kategori için
: HDD kategori için
intel i7 | CPU | Model | Socket | L1 Cash | L2 Cahs | etc.
:
samsung F3 | HDD | Model | Speed | GB | etc.
Ben o yüzden hep veritabanından farklı sonuçlar elde edebilirsiniz 'KategoriNo' dayalı verileri döndüren bir sorgu var
Bu yüzden sorgularımdaki kategorilere dayanarak, her zaman farklı sütun numaraları ve isimleri alabilirim. Veritabanı erişimi için, sonuç veren saklı prosedüre basit ADO.NET çağrısı kullanıyorum. Ancak, sorgu sonucu doğası gereği dinamik olduğundan, bu verileri okumak için iyi bir yol olduğunu bilmiyorum.
Ben Product
varlık ama ben gerçekten :( Ben Product
varlık yapmak ve hangi devralır diğer varlıkları yapabilirsiniz düşünce nasıl karıştı yapılanProduct
Cpu
gibi Hdd
, Camera
, PcCase
, GraphicCard
, MobilePhone
, Gps
vb
ama sanırım ben 200+ varlıkları etki ile bu bitirebilirsiniz çünkü aptal olduğunu.
Bu durumda ne yaparsınız?
Okumak ve nereye yerleştirmek için bu bir dinamik özellikleri?
GÜNCELLEME - bazı çözüm
dayalı Pekala bazı çözüm geldi DataTable
nesneyi kullanmak Dictionary
ve @Tim SCHMELTER fikir için öneri @millimoose.
Şimdi, bu işler veriyi okuyor ve görüntüleyebiliyorum.
Ama yine de daha akıllı kişilerden tavsiye gerekiyor Ben bu iyi yaptım mı yoksa daha iyi idare mi yoksa spageti kodu yaptım. Yani burada ne yaptım :
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);
}
}
: Sen,
Biraz ilgili soru gibi bir şey yapabileceğini '(ya da bunun gibi bir şey)? –
millimoose
En kolay yaklaşım 'DataTables 'kullanmaktır. Ardından, tabloyu doldurmak için bir sql-query ve bir 'SqlDataAdapter' gereklidir. –
@millimoose Önce 'Sözlük' hakkında düşündüm. Ama bilmiyorum, bu senaryo için farklı bir çözüm var. Veya 'Sözlük' aslında tek veya en iyi çözümdür. – 1110