2011-10-24 3 views
4

"location"클래스가 있습니다. 이 클래스는 기본적으로 주소를 포함하므로 "위치"라는 용어가 사용됩니다. 나는 "위치"가 되고자하는 여러 레코드를 반환하는 datatable을 가지고있다.DataTable의 각 행을 클래스로 사용 하시겠습니까?

바로 지금, "location"클래스에 ID로 단일 "위치"를 가져 오는 "load"메서드가 있습니다. 하지만 여러 개의 데이터 테이블 행에서 "위치"객체의 컬렉션을 가져 오려면 어떻게해야합니까? 각 행은 "위치"가됩니다.

명백한 이유로 각 레코드에 대해 데이터베이스로 이동하고 싶지 않습니다. "load"메소드를 우회하는 데이터 테이블의 행을 반복하면서 위치 클래스의 새 인스턴스를 만들고 속성에 값을 할당하기 만합니까? 그것은 나에게 논리적 인 것처럼 보이지만 이것이 올바른/가장 효율적인 방법인지 확실하지 않습니다.

답변

1

당신은 당신이 필요로하는 모든 위치를 받고, 바른 길에있어 데이터베이스를 한 번 방문하면 성능 측면에서 가장 좋습니다.

코드를 더 깔끔하게/더 짧게 만들려면 클래스의 생성자를 DataRow으로 설정하고 그에 따라 속성을 설정합니다. 이렇게하면 코드 기반의 한 위치에서 열에서 속성으로 매핑을 중앙 집중화하여 유지 관리가 쉽습니다.

그런 다음 데이터 테이블의 행을 순환하여 생성자를 호출하는 것이 좋습니다.

데이터베이스 상호 작용을 위해 Entity Framework과 같은 object to relational mapper을 사용할 수도 있습니다.

+0

달콤한. 저건 완벽 해. 왜 내가 그런 생각을하지 않았는지 모르겠다. –

2

데이터의 행 (또는 행 모음)이 C# 비즈 개체에 매핑되는 방식은 (귀하의 설명)입니다. 그러나 자신에게 당신이 ORM 기존의 숫자 중 하나를 고려해야 할 많은 일을 저장하는 프레임 워크와 같은 NHibernate, Entity Framework, Castle ActiveRecord

실제로 모든 상용구 코드를 생성합니다

대부분으로 ORMs 행과 필드 (관계형 매퍼 객체) .NET 객체 속성에 매핑되고 그 반대의 경우도 마찬가지입니다. (예, ORM을 사용하면 db 데이터를 검색 및 매핑하는 것만 큼 쉽게 추가, 업데이트 및 삭제할 수 있습니다.) ORM을 살펴보십시오. 소량의 학습 (각 학습 곡선이 있습니다)은 곧 마무리 될 것입니다. ORM은 또한 RDBMS를 다루는 모든 애플리케이션에서 꽤 표준적이고 실제로 기대되고 있습니다.

또한 이러한 링크가 관심을 가질 수있는 (ORM은 관련) :

Wikipedia article on ORMs

SO Discussion on different ORMs

Many different .NET ORMs listed

1

IEnumerable을 반환하는 메서드를 만듭니다. 이 방법에서는 데이터베이스 항목을 수행하고 위치 생성자에 sqldatareader를 전달합니다. 그래서 나는 이와 같은 것을 갖게 될 것입니다.

분명히 그 코드는 효과가 없을 것입니다.

ORM 매퍼를 사용하면 많은 작업을 수행 할 수 있으므로 많은 시간을 절약 할 수 있습니다!

관련 문제