2009-12-24 2 views
0

간단하고 작은 데이터베이스에 대해 LinqToSql 코드를 자동 생성하기 위해 SqlMetal을 사용하려고합니다. 데이터베이스는 일부 기본 키와 외래 키 (보기, 저장 프로 시저, 함수 등)가없는 테이블 만 갖습니다. Linq를 사용하여 모든 조인, 그룹화, 정렬 및 고급 데이터 조작을하고 싶습니다.SqlMetal은 * 전용 * 테이블을 포함하는 데이터베이스에 매핑하기위한 좋은 솔루션입니까?

LinqToObjects 및 LinqToXml에 대한 경험이 있지만 적절한 ORM 또는 LinqToSql을 사용한 적이 없습니다.

몇 가지 질문 :

  1. SqlMetal/LinqToSql의 학습, 내 사전 경험을 부여하는 방법 가파른?
  2. 간단한 데이터베이스에 대해 SqlMetal은 신뢰할 수 있습니까?
  3. 어떤 종류의 놀라움이 있습니까?
  4. LinqToSql 코드를 빌드하거나 프로젝트를 다시 빌드 할 때마다 코드가 다시 생성되도록 프로젝트를 자동화하는 방법은 무엇입니까? (Visual Studio 2008을 사용하게 될 것입니다.)
  5. SqlMetal 및 LinqToSql 사용에 대한 신속한 설명을 위해 좋은 자습서를 권할 수 있습니까?
+0

SqlMetal이 가장 적합하지만 완전한 해결책은 아닙니다. SqlMetal이 처리 할 수없는 상황에서는 O/R 디자이너를 사용해야합니다. –

+0

마이클,하지만 내 아주 단순한 상황 (테이블 만)을 감안할 때 어떤 문제가 있습니까? – devuxer

답변

2

제목 질문에 대한 답변은 예입니다. 이는 테이블이있는 데이터베이스에 대한 훌륭한 솔루션입니다 (보기 및 저장 프로 시저와 같은 다른 데이터베이스 구성을 포함하도록 데이터베이스가 커질 때 포인트가 커질 수 있습니다).

  1. 매우 얕습니다. Linq2Objects에서 작동하는 특정 메소드가 Linq2SQL에서 작동하지 않는다는 것이 가장 큰 차이점입니다. 객체와 Linq2SQL을 함께 사용할 때는 조심해야합니다. "우리가 유일하게 지원하는 것은 Contains"라는 효과를내는 예외가 생길 때 이것을 치는 것을 알게 될 것입니다.
    • 아마도 Linq2SQL은 가장 효율적인 SQL을 생성하지 못하는 경우가 있습니다.
    • 경우에 따라 트랜잭션이 까다로워 질 수 있습니다.
    • 업데이트 성명이 없습니다. 레코드 집합을 업데이트 할 때마다 선택해야하며 각 레코드를 업데이트 한 다음 SubmitChanges()을 업데이트하십시오.
    • 단지 선택하지 않으면 테이블에 기본 키가 있어야합니다. 기본 키가 없으면 삭제하거나 업데이트 할 수 없습니다.
    • Linq2SQL은 다 대다 관계를 직접 지원하지 않습니다.
  2. 간단한 해결책은 빌드 할 때마다 Linq2SQL DataContexts를 생성하는 미리 작성 작업을 설정하는 것입니다.

Linq2SQL을 모든 용도로 사용하려면 귀찮은 LINQ 쿼리 (불쾌한 디버깅주기)를 준비하십시오. 조인 구문은 길며 쿼리의 복잡성에 따라 SQL에 상응하는 것보다 관리하기가 더 어려워 질 수 있습니다. 그룹화는 GROUP BY만큼 쉽지 않습니다.

+0

고맙습니다 Jason. # 4의 경우 "Linq2SQL DataContexts 생성"이라고 말하면 문자 그대로 SqlMetal.exe를 적절한 스위치로 실행한다는 의미입니까? – devuxer

+0

@DanThMan : 네. 프로젝트 속성의 "Pre-build event command line"텍스트 상자에 적절한 스위치와 함께 SqlMetal 명령을 입력하는 것만 큼 간단합니다. –

+0

좋아, 그게 내가 원하는거야. 감사. – devuxer

0

LINQ에 대한 진지한 점이 있다면 Linq in Action 사본을 선택하십시오. 그것은 Linq와 SqlMetal의 모든면을 다루며 챕터를 쉽게 소화합니다.

또한 관심이 있으시면 SubSonic 3을 사용하여 TT4 템플릿을 사용하여 VS2008에서 매우 자동화 된 모델을 생성 할 수 있습니다. 그런 다음 일반 Linq 쿼리를 사용하여 데이터에 액세스합니다. 이것은 아마도 가장 쉬운 방법 일 것입니다.

관련 문제