2009-02-27 5 views
19

중간 크기의 프로젝트에서 LINQ to SQL을 사용하기 시작했으며 L2S가 제공하는 이점에 대한 이해를 높이고 싶습니다.LINQ to SQL의 장점은 무엇입니까?

하나의 단점은 코드의 또 다른 계층을 추가한다는 것이고, 저의 이해는 저장 프로 시저와 ADO.Net을 사용하는 것보다 성능이 떨어지는 것입니다. 특히 복잡한 쿼리의 경우 디버깅이 어려울 수 있으며 어쨌든 저장 프로 시저로 이동 될 수 있습니다.

더 나은 개발 환경에서 쿼리를 작성하는 방법을 항상 원했지만 L2S는 내가 찾고 있었던 솔루션을 쿼리합니까? 아니면 SQL 위에 다른 레이어를 만들었습니까? 걱정하지 마세요.

+0

난 당신이 모든 곳에서 "LINQ는 SQL로"말에 질문을 변경 한 경우 당신이 일이 명확하게 거라고 생각합니다. LINQ와 SQL 사이에는 많은 LINQ가 있습니다. –

+0

좋은 지적, thx. – alchemical

답변

41

장점 L2S 제공 :

  • 마법 문자열, 당신은 SQL에서이 같은
  • 인텔리
  • 컴파일 데이터베이스 작업 패턴의
  • 단위
  • 빠른 발전을 변경하면 확인을 쿼리 (컨텍스트)
  • 사용할 수있는 자동 생성 된 도메인 개체 소규모 프로젝트
  • 게으른 로딩.
  • linq 쿼리/lambdas를 작성하는 방법을 배우는 것이 .NET 개발자를위한 필수 학습입니다. 성능에 관해서는

:

  • 는 대부분의 경우 성능은 대부분의 솔루션에 문제가 될 수 없습니다. 사전 최적화는 안티 패턴입니다. 나중에 응용 프로그램의 일부 영역이 느려지는 경우 이러한 부분을 분석 할 수 있으며 경우에 따라 일부 linq 쿼리를 저장 프로 시저 또는 ADO.NET과 바꿀 수도 있습니다.
  • 많은 경우에 게으른 로딩 기능은 성능을 향상 시키거나 최소한 코드를 훨씬 단순화 할 수 있습니다. debuging에 관한

:

  • Linq2Sql을 debuging 제 생각은 저장 프로 시저와 ADO.NET 모두보다 훨씬 쉽습니다. Linq2Sql Debug Visualizer을 살펴보고 쿼리를보고 디버깅 할 때 결과를보기 위해 실행을 트리거 할 수도 있습니다.
  • 또한 콘솔 창에 모든 SQL 쿼리를 작성하는 문맥, 다른 레이어에 대한 자세한 정보를 here

구성 할 수 있습니다

    Linq2Sql 다른 레이어로 볼 수 있지만, 할 수
  • 순전히 데이터 액세스 레이어입니다. 저장 프로 시저도 코드의 또 다른 계층이며 비즈니스 로직의 일부가 저장 프로 시저로 구현 된 많은 사례를 보았습니다. 제 생각에는 비즈니스 계층을 두 곳으로 나눠서 개발자가 비즈니스 도메인을 명확하게 볼 수 없기 때문에 이것은 훨씬 더 나쁘다고 생각합니다.
+0

+1 아주 좋은 대답 나는 그것을 좋아하지 감사. –

+1

좋은 exmplanation – AjayR

1

나는 그들이 당신이 찾고있는 것이라고 말해야합니다. 그것에 익숙해지는 데 약간의 시간이 걸리지 만 일단 그렇게되면 (적어도 나를 위해) 돌아갈 생각을 할 수는 없습니다. linq 대 저장 프로 시저의 경우 잘못 작성하면 성능이 저하 될 수 있습니다. 나는 SQL에 linq로 이동하여 코딩 된 클라이언트의 저장 프로 시저 몇 개를 옮겨서 시간이 20 초 (웹 앱의 경우 거의 실행 불가능)에서 < 1 초로 떨어졌습니다. 그리고 저장 프로 시저 솔루션보다 코드가 훨씬 적습니다.

업데이트 1 : 또한 실제로 얻는 것의 열을 제한 할 수 있으므로 많은 유연성을 얻을 수 있습니다. 저장 프로 시저 솔루션에서 기본 쿼리가 같더라도 가져 오는 각 열 집합에 대한 프로 시저를 정의해야합니다.

0

최근 엔티티 프레임 워크 환경에서 LINQ2Entity로 전환했습니다. 이전에는 기본적인 SQL 어댑터가있었습니다. 우리가 작업하고있는 데이터베이스는 다소 작기 때문에 LINQ의 성능에 대해서는 언급 할 수 없습니다.

필자는 쓰기 쿼리가 훨씬 쉬워졌으며 엔티티를 추가하면 강력한 입력이 가능하다는 것을 인정해야합니다.

+0

요하네스, 나는 강한 입력이 또한 강력한 입력을 :)이 같은 ... 나는 좋은 사람이 생각이 확신, linq2sql 대 linq2entity의 인수라고 생각하지 않습니다, 나는 ado.net 대 linq2sql 비교로 제한 – eglasius

14

몇 가지 간단한 생각.

LINQ는

  • 쿼리 메모리 컬렉션과 독립 프로세스 데이터 저장소 같은 구문 및 선언적 스타일 쿼리에 대해 아주 잘 작동
  • 사업자 일반적으로 - 그것은 모두 쉽게 매우 많은 경우에 읽고 쓰십시오.
  • 깔끔한 언어 통합을 통해 새로운 공급자 (프로세스 내부 및 외부) 모두를 작성하고 동일한 쿼리 식 구문을 활용할 수 있습니다.

LINQ SQL (또는 다른 데이터베이스 LINQ)는 저장 발동으로보다는 필요

  • 쓰기 쿼리가 훨씬 빨리 개발한다 : 당신이 원하는 데이터를 얻을 단지 참여 훨씬 적은 단계가
  • 오타가 발생할 수있는 부분이 적은 문자열 (저장된 procs, 매개 변수 이름 또는 단순한 SQL). 이 동전의 다른면은 쿼리를 위해 Intellisense를 얻는 것입니다.
  • ADO.NET의 "원시"데이터로 작업하지 않는다면 어쨌든 어딘가에 개체 모델을 갖게 될 것입니다. SQL에서 LINQ를 처리하도록하지 않는 이유는 무엇입니까? 오히려 쿼리를 수행하고 객체를 사용할 수있게되어서 사용할 준비가 된 것 같습니다.
  • 필자는 성능이 좋을 것이라고 기대합니다. 그렇지 않은 경우 직접 튜닝하거나 직접 SQL로 폴백 할 수 있습니다. ORM을 사용하면 올바른 인덱스 등을 생성 할 필요가 없으므로 일반적으로 생성되는 SQL을 확인해야합니다.

그것은 어떤 방법으로 만병 통치약은 아니지만, 나는 크게 그것을 직접 SQL 쿼리를 만들거나 저장 발동을 사용하려면 다음 중 하나를 선호합니다.

+0

John & Bengt은 모두 똑같은 말을합니다. 훌륭한 세부 사항과 함께! –

+0

DB (보안 및 성능 분석을 위해 DB 기능을 활용할 수 있도록)에 비즈니스 로직을 구현하는 것이 가장 좋으며 LINQ를 사용하여 SP에서 가져온 데이터로 오브젝트를 채우는 동안 코딩을 줄이는 것이 가장 좋습니다. – Faiz

+1

@Faiz이 : 다른 한편으로는, 비즈니스 로직은 상당히 일반적으로 * 간단한 * SQL에 비해 C#으로 구현하고 만 데이터에 대한 단일 액세스 경로 (데이터베이스의 앞에 예를 들어 잘 계층 웹 서비스)가있는 경우 그러면 두 세계의 장점을 모두 누릴 수 있습니다. –