2009-04-11 3 views
2

많은 레거시 시스템을 통합하는 과정에 있습니다. 그들은 각각 다른 데이터베이스를 가지고 있습니다. 대부분의 경우 데이터 액세스 코드를 작성해야합니다.레거시 데이터베이스 작업에 사용할 ORM은 무엇입니까?

데이터베이스 스키마를 변경할 수 없습니다 (일부 인덱스 등을 적용 할 수 있지만 테이블과 테이블 열은 구조를 유지해야 함). 데이터베이스 중 일부는 올바른 디자인과 적절한 관계 및 기본/외래 키가 있으며 일부 다른 데이터베이스는 그다지 부족합니다.

이 작업에는 어떤 ORM을 선택 하시겠습니까? 프로젝트 전체에서 동일한 ORM을 사용하고 싶습니다. 내 요구 사항은 다음과 같습니다.

  • 코드에서 테이블 또는 열의 이름을 바꿀 수있는 기능. 데이터베이스에 이전 이름을 유지하십시오.
  • 적절한 코드 생성
  • 효율적인 LINQ 지원 (데이터 모델에 대한 LINQ 쿼리는 효율적인 SQL로 변환되어야 함).
  • 생성 된 데이터 클래스는 POCO's이어야합니다.
  • 다른 데이터베이스 엔진을 지원하는 것이 좋습니다.

저는 현재 LINQ-To-SQL에 대한 경험이 가장 많습니다. 그러나 나는 그것이이 프로젝트를위한 잘못된 선택일지도 모른다는 느낌이 들었다. 나는 새로운 프레임 워크를 배우는 데 약간의 시간을 투자 할 용의가있다.

+0

광속 3.0 불완전한 LINQ의 구현이 제대로 LINQ 예측을 실행하지 않습니다 또한 (단지 SQL 프로파일 러를 해고하고 일부는 * 1000 개 기록에 * 조인 쿼리 실행), 그리고 ... 즉 당신이하는 경우에만 * Customers * 테이블의 * Name * 필드를 원하면 Lightspeed는 SQL에서 * Customers *의 모든 열을 선택하고 호출 코드에 * Name * 만 투영합니다. 이제 그게 짜증이야! – Mark

답변

3

ORM이 저장하는 것보다 더 많은 문제를 일으킬 수 있습니다. 일부 레거시 데이터베이스 중 일부가 제대로 설계되지 않은 경우 ORM보다 낮은 수준에서 데이터 액세스 계층을 쉽게 구축 할 수 있습니다. Fowler의 Patterns of Enterprise Application Architecture은 데이터 액세스 계층 구조화에 대한 다양한 접근 방식을 카탈로그 화하는 훌륭한 역할을합니다.

일부 데이터 액세스 레이어는 코드 생성 솔루션을 사용하기 쉽습니다. 그러나 다양한 스키마 (존재하는 말처럼 지저분한)의 존재는 일률적 인 접근 방식이 효과가 없을 수도 있음을 암시하거나, 모든 레거시 데이터베이스와 잘 작동하도록 불균형 한 노력을 포함 할 수 있습니다.

0

LINQ to SQL은 SQL Server에서만 작동합니다. ADO.NET Entity Framework는 ADO.NET에서 지원하는 모든 데이터베이스에서 작동합니다.

내가 목록에서 볼 수있는 유일한 것은 구현 된 클래스가 POCO가 아니라는 것입니다. 특히 구현 관련 데이터도 일련 화되므로 웹 서비스에서 이들 중 하나를 노출하는 것은 좋지 않습니다.

0

nHibernate는 대부분의 요구 사항에 적합합니다. 유일한 제한은 linq입니다. 그러나 그들은 linq 쿼리에 대한 지원을 추가하는 작업을하는 스폰서가 기부 한 풀 타임 개발자입니다.

많은 데이터베이스 엔진을 지원하며 무료이며 POCO를 사용할 수 있습니다. 다양한 조각을 확장 가능하게 만드는 많은 고리가 있습니다.

0

제 생각에는 가장 중요한 요소는 도메인 모델을 구현할 것인지 아니면 테이블을 데이터 전송 개체 (DTO)에 직접 매핑 할 것인지입니다. 도메인 모델링을한다면 NHibernate를 추천한다. DTO로 작업 할 계획이라면 Entity Framework 및 DataTables를 포함하여 많은 훌륭한 후보자가 있습니다.

1

nHibernate가 최선의 방법이 될 것이며, POCO 지원을 제공하고, 내가 아는 모든 데이터베이스에 대한 지원을 포함하며, LINQ 지원이 충분하다고 생각합니다.매핑 파일을 생성하고자하는 것처럼 들리 겠지만, 거기에 내 세대 및 코드 작성자를위한 템플릿이 있습니다. 그렇게하면 수동 작업을하지 않아도됩니다. (초기 생성 이후 테이블 이름, 관계 등을 변경하고 변경하는 것이 쉽습니다. 대부분의 세대 기반 프레임 워크에서는 훨씬 어렵습니다)

0

C#으로 작업하고있는 것으로 추측하겠습니까?

저는 SubSonic을 사용해 보았습니다. 데이터베이스가 이미 주위에있을 때, 특히 저장 프로 시저와 뷰를 처리 할 때 좋은 선택이었습니다. nHib처럼 구성 할 xml이 없으며 몇 시간 안에 (또는 당신이 무엇을하고 있는지 아는 경우 20 분 안에) 실행할 수 있습니다. 그것은 몇몇 데이타베이스를 지원합니다.

내가 Rob과 Co.가 현재 추가하고있는 Linq 부분은 내가 거기에있을 수도 있지만 아직 시도하지 않은 최신 정보가 될 것이라고 생각합니다.

http://subsonicproject.com/

관련 문제