가능한 최선의 방법을 설명하려고합니다. 내 데이터베이스에 다음과 같은 테이블이 있습니다 데이터베이스에서 동적 속성을 읽는 방법
Products{ProductId, CategoryId ...}
Categories{CategoryId ...}
CategoryProperties{CategoryPropertyId, CategoryId, Name ...}
PropertyValues{ProductId, CategoryPropertyId, Value ...}
그래서 목표는 어떤 범주에 속하고 각 카테고리는 'PropertyValues'테이블에서 값 속성의 'N'을 가질 수있는 제품의 목록을 가지고하는 것입니다. 는 CPU 범주의
: 하드 디스크 범주의
intel i7 | CPU | Model | Socket | L1 Cash | L2 Cahs | etc.
:
samsung F3 | HDD | Model | Speed | GB | etc.
그래서 난 항상 데이터베이스에서 다른 결과를 얻을 수있는 '카테고리 ID'를 기반으로 데이터를 반환하는 쿼리를
그래서 내 쿼리의 카테고리를 기반으로해서 항상 다른 열 번호와 이름을 얻을 수 있습니다. 데이터베이스 액세스의 경우 결과를 반환하는 저장 프로 시저에 대한 간단한 ADO.NET 호출을 사용합니다. 그러나 쿼리 결과가 자연 스럽기 때문에이 데이터를 읽는 좋은 방법이 무엇인지 알지 못합니다.
가 나는 Product
엔티티하지만 내가 정말 :( 나는 내가 Product
엔티티를하고있는 상속 다른 엔티티를 만들 수 있다고 생각하는 방법을 혼란 스러워요했다Product
Cpu
같은 Hdd
, Camera
, PcCase
, GraphicCard
, MobilePhone
, Gps
등
하지만 난 생각 내가 200 개 이상의 기관 도메인의 이것을 끝낼 수 있기 때문에 바보있다.
이 상황에서 무엇을 하시겠습니까?
읽는 방법 및 넣을 곳 동적 속성?
UPDATE - 일부 솔루션
에 따라 모든 권리는 좀 솔루션에 온 DataTable
개체를 사용 Dictionary
및 @ 팀 Schmelter 아이디어 제안을 @millimoose.
이제 ...이 작업은 데이터를 읽음으로써 표시 할 수 있습니다.
그러나 나는 여전히 에 대해 나보다 똑똑한 사람들로부터 조언을 필요로한다. 나는이 좋은 것을했다. 또는 나는 이것을 잘 처리해야한다. 또는 나는 약간을 만들었다. spageti 코드. 그래서 여기에 내가 무슨 짓을했는지 :
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