2009-06-15 3 views
0

데이터베이스에 2 행의 직원 데이터가있는 테이블이 있습니다.데이터베이스 행을 오브젝트로 변환

........... 

ID | Name 

........... 

1 | Jon Doe 

2 | Jane Doe 

........... 

나는 코드로, 단지 같이, 내 코드이 필요합니다. 이제 코드는 앱이 처음 실행될 때 데이터베이스에 저장하고, 따라서 데이터베이스에 1,200 개체 인스턴스를 작성에서 나를 구원 할 수는

Employee e1 = new Employee(); 
e1.ID = 1; 
e1.Name = "Jon Doe"; 

Employee e2 = new Employee(); 
e2.ID = 2; 
e2.Name = "Jane Doe"; 

: 나는이 점을 변환해야합니다. 따라서 XML을 사용하는 것과 같은 몇 가지 방법이 필요합니다.

이것은 예입니다. 내가 처음으로 무언가로 설정해야하는 설정 (폭, 높이, 레이블 그리드) 등을 저장하는 테이블이 있기 때문에 필요합니다. 앱이 실행됩니다.

어떤 방법으로 생성 할 수 있습니까? 사용 가능한 도구가 있습니까? 또는 어떻게 할 생각입니까?

+0

어떤 데이터베이스를 사용하고 있습니까? –

+0

sql server 2005 – abmv

+0

'Employee e'+ cast (id는 varchar) + '새 Employee() {ID ='+ 캐스트 (ID는 varchar) + ', Name = @ "'+ name + '"}}' fromTable –

답변

9

ORM 외부에서이를 수행하는 일반적인 방법은 DataRow를 매개 변수로 받아들이고 새로운 Employee 개체를 반환하는 .Create() 메서드를 사용하여 EmployeeFactory 클래스를 작성하는 것입니다.

이렇게하면 코드를 사용하여 직원 클래스를 "오염"시킬 필요가 없으며 문제를 테스트 할 수있는 좋은 방법으로 분리 할 수 ​​있습니다.

+0

나는이 옵션이 될 것이라고 생각한다. powerdesigner가 DB에서 아예 리버스 엔지니어를 잘 수행 할 수 있기를 원한다. – abmv

+0

왜 당신이 downvoted인지 이해하지 못한다. –

+0

"나중에 ORM을 벗어난"텍스트를 추가했다. –

0

데이터베이스 스키마를 기반으로 개체를 생성하려면 Entity Framework, Linq2SQL, SubSonic, nHibernate 등과 같은 것을 사용할 수 있습니다.

+0

오브젝트 객체 인스턴스가 코드로 유지되지 않습니다 – abmv

2

편집 질문이 잘못되었습니다. 마치 orm 매퍼가 원하는 것처럼 보였지만 실제로 찾고있는 것은 MyGeneration과 같습니다. 데이터베이스에서이를 가리켜 필요한 객체를 생성 할 수 있습니다. ORM이 이러한 상황에서 여전히 유용하기 때문에 원래 답변의 나머지 부분은 남겨 둡니다.

.Net에는 여러 가지가 있으며, .NET 3 이상에서 개발할 경우 Linq 호출 기능이 내장 된 것보다 많습니다. Linq를 시작하는 것은이 답변의 범위를 벗어나므로 great blog post from Scott Guthrie이 여기에 있습니다. EntityFramwork라고하는 다른 Microsoft 제품도 있으며 here

등의 무료 .Net 포트가 있습니다. 또한 작업이 완료된 Hibernate 프레임 워크의 무료 포트입니다.

ORM 매퍼는 데이터베이스 데이터를 클래스로 쉽게 변환하지만 트레이드 오프가 있습니다. 자세한 내용은 wikipedia 항목을 참조하십시오.

+0

Hibernate는 작은 프로젝트를위한 엉덩이의 고통입니다 –

+0

이 작업을 수행 할 MyGeneration 템플릿이 있습니까? – abmv

+0

MyGeneration은 동일한 회사에서 만든 ORM 인 EasyObjects 및 dOOdads 용 템플릿을 제공합니다 (다운로드). –

0

코드를 생성하고 매핑을 수행하는 많은 ORM 도구 (Cody C 권장)가 있습니다. 그러나 질문의 ​​소리에서 나는 그것이 당신의 신청에 과잉이라고 생각합니다. 이것이 모두 필요한 경우 데이터 액세스 권한 (동적 SQL, 저장된 proc, 뷰 등)을 사용하여 쿼리를 실행 한 다음 반환하는 데이터의 값을 개체에 매핑하면됩니다.

분명히 가장 좋은 해결책은 아니지만 타사 도구를 도입하는 것이 필요한 것 이상일 수 있습니다.

1

왜이 형식의 데이터를 선택하여 파일에 저장하지 않으시겠습니까?

은 MySQL을 위해 내가 할 (그리고 한) 것 :

저장 C 등이 쿼리 :

SELECT CONCAT('Employee e', id, ' = new Employee();', char(13), 
     'e', id, '.ID = ', id, ';', char(13), 
     'e', id, '.Name = "', name, '";', 
     char(13), char(13)) as '//generated' from employee; 

in.sql \ 및 명령 행에서 실행 :

mysql -u root <c:\in.sql> c:\out.cs 

것은이 실행됩니다 in.sql의 쿼리를 out.cs 형식으로 출력합니다.

//generated 
Employee e1 = new Employee(); 
e2.ID = 1; 
e2.Name = "..."; 


Employee e2 = new Employee(); 
e2.ID = 2; 
e2.Name = "..."; 
관련 문제