문제

나서"초보자 가이드 LINQ"게시물이 여기에서 유래(초보자 가이드 LINQ어),하지만 했다는 후속 질문:

우리는 새로운 프로젝트가 거의 우리의 모든 데이터베이스 op 의 것이 매우 간단한 데이터 검색(이의 다른 세그먼트의 프로젝트에 이미 데이터를 기록합).대부분의 다른 프로젝트까지 이점들에게 저장 프로시저를 사용하는을 위한 이러한 것들입니다.그러나고 싶 활용 LINQ-to-SQL 면 그것은 더 의미가 있습니다.

그래서 질문은 이것입니다:간단한 데이터 검색,는 접근 방식은 더 나은,LINQ-to-SQL 또는 저장되었?어떤 특정 프로의 또는 콘니까?

감사합니다.

도움이 되었습니까?

해결책

일부의 이점 LINQ 통해 sprocs:

  1. 형식 안전성:제 생각에는 우리는 모두 이 사실을 이해하고 있습니다.
  2. 추출:이와 함께 특히 사실 LINQ-to-체.이러한 추상화한 프레임워크를 추가로 개선할 수 있는 쉽게 이용할 수 있습니다. PLINQ 예를 추가하는 멀티-스레딩을 지원하 LINQ.코드 변경은 최소한의 추가 이것을 지원합니다.그것은 훨씬 더 될 것입을 이렇게 데이터 액세스 코드를 호출하는 간 sprocs.
  3. 디버깅 지원:나는 사용할 수 있습니다.NET 디버거 디버깅하는 쿼리를 처리합니다.와 sprocs 할 수 없습니다 쉽게 디버깅 SQL 고 그 경험은 주로 묶는 데이터베이스는 공급업체(MS SQL 서버는 쿼리를 제공하는 분석기는 하지만 종종 그것이 충분하지 않).
  4. 공급업체 관계없:LINQ 작품으로 많은 데이터베이스의 수 및 지원되는 데이터베이스의 증가할 것입니다.Sprocs 되지 않은 항상 휴대가 데이터베이스 간에,하나 때문에 다양한 구문 또는 기능을 지원하면(데이터베이스를 지원합 sprocs 모두에서).
  5. 배포:다른 사람이 언급한 이미지만,그것은 쉽게 배포하는 하나의 어셈블리하는 것보다 배포하는 설정의 sprocs.이것은 또한 관계#4.
  6. :당신은 방법을 배우게 할 필요가 없습 T-SQL 데이터에 액세스할 필요가 없을 배우는 데이터 액세스 API(예:ADO.NET)필요에 대한 호출하 sprocs.이와 관련하#3,#4.

어떤 단점이 LINQ 대 sprocs:

  1. 네트워크 트래픽이:sprocs 필요를 직렬화 sproc-이름 및 인수한 데이터는 와이어를 통해 동안 LINQ 면 전체 쿼리가 있습니다.이것을 얻을 수 있습니다 정말 나쁜 경우 쿼리는 매우 복잡합니다.그러나,LINQ 의 추상화 할 수 있습을 개선 하기 위해 마이크로소프트를 이 시간입니다.
  2. 적게 가동 가능한:Sprocs 을 최대한 활용할 수 있는 데이터베이스의 featureset.LINQ 더 높은 경향을 일반에 그것을 지원합니다.이것은 일반적인에서 어떤 종류의 언어 추상(예를들면C#대 assembler).
  3. 다시 컴파일:필요하신 경우에는 변경하는 방법 당신은 데이터 액세스를 다시 컴파일해야,버전,그리고 재배포 어셈블리입니다.할 수 있습 Sprocs 때때로 수 DBA 조정하는 데이터 액세스 루틴에 필요없이 다시 배치도.

보안과 관리 기능은 뭔가가 사람들에 대해 논쟁도.

  1. 보안:할 수 있습니다 예를 들어,보호의 중요한 데이터에 대한 액세스를 제한하여,테이블을 직접 넣어 Acl 에 sprocs.LINQ,그러나,당신은 여전히 직접 액세스를 제한하는 테이블 대신에 넣어 Acl 에 업데이트할 수 있는 테이블 을 달성하는 유사한 말(가정의 데이터베이스에서 지원 업데이트할 수 있는 뷰).
  2. 관리 효율성:뷰를 사용하여 당신의 장점을 보호 응용 프로그램 non-을 깨는 스키마에서 변경(과 같은 테이블을 정규화).업데이트할 수 있습니다 볼 필요로하지 않고 데이터 액세스 코드를 변경합니다.

내가 사용하는 것에 큰 sproc 사람이다,그러나 나는 시작을 향 LINQ 더 나은 대안으로서 일반적입니다.이 있는 경우 일부 지역 sprocs 분명히 더 나은,그 내가 아마도 여전히 작성 sproc 그러나 사용하여 액세스 LINQ.:)

다른 팁

나는 일반적으로 지지를 넣는 모든 것에 저장되는 절차의 모든 이유로 Dba 되었을 뿐만 아니라 공간뿐만 아니라니다.의 경우에 Linq,그것은 진정한 수 없을 것이라는 성과 차이를 가진 간단한 CRUD 쿼리를 처리합니다.

하지만 몇 가지 사항에 유의할 때 마음이 결정:를 사용하여 어떤 ORM 커플을 단단히하는 데이터 모델입니다.DBA 가 없는 자유를 변경하지 않고 데이터 모델을 강제로 당신의 코드를 컴파일합니다.저장 프로시저를 숨길 수 있는 이러한 종류의 변화 정도,이후 매개 변수 목록은 결과를 설정(s)에서 반환된 절차는 대표의 계약,그리고 내장될 수 있는 변화의 주위에,그냥 그렇게 오래로하는계약은 여전히 만났다.

또한,는 경우 Linq 사용되는 더 복잡한 쿼리를 조정하는 데이터베이스가 훨씬 더 어려운 작업입니다.할 때 저장 프로시저를 실행하는 느린,DBA 할 수 있는 완전히 초점에 코드를 격리하고 있는 옵션이 많은 그냥 그렇게는 계약은 여전히 만족하면 그/그녀는 일입니다.

본 많은,많은 경우가 심각한 문제 응용 프로그램에서 해결되었으로 스키마의 변경 및 코드에 저장된 절차 없이 변경하여 배포된 코드를 컴파일합니다.

아마도 특징:낮은 삽입 손실,고수익 손실 접근하는 것이 좋을 것이 Linq?Linq 수 있습은 물론,수용되는 전화를 저장합니다.

Linq to Sql.

Sql 서버에 캐시 쿼리 계획,그래서 거의 없는 성능 향상을 위해 sprocs.

귀하의 linq 문에,다른 한편으로는 것이 논리적으로의 부분 테스트와 당신의 응용 프로그램입니다.Sprocs 상 분리고는 열심히 유지하고 테스트합니다.

면 새로운 응용 프로그램 처음부터 지금 나는 그냥 사용 Linq,아 sprocs.

에 대한 기본적인 데이터 검색을 나는 것가 Linq 지 않습니다.

로 이동하기 때문에 Linq 내가 찾은 다음과 같은 장점이 있습니다:

  1. 디버깅을 내 DAL 쉽게 적이있다.
  2. 컴파일 시 안전 경우 스키마에 변경 내용은 귀중한 것입니다.
  3. 배기가 쉽기 때문에 모든 컴파일로 DLL 습니다.더 이상 배포를 관리하는 스크립트가 있습니다.
  4. 기 때문에 Linq 지원할 수 있는 쿼리를 아무것도를 구현하는 진행 인터페이스를 사용할 수 있는 동일한 구문을 쿼리를 XML,체 및 모든 기타 데이터 소스를 배울 필요없이 새로운 구문

LINQ 이 부풀리는 절차 캐시

는 경우 응용 프로그램을 사용하여 LINQ to SQL 쿼리의 사용을 포함할 수 있는 문자열이 높은 변수의 길이,SQL 서버 절차 캐시게 될 것이 부풀어의 한 버전에 대한 쿼리를 모든 가능한 문자열의 길이 있습니다.예를 들어,다음과 같은 매우 간단한 쿼리를 만들에 대한 사람입니다.AddressTypes 테이블에서 AdventureWorks2008 데이터베이스:

var p = 
    from n in x.AddressTypes 
    where n.Name == "Billing" 
    select n;

var p = 
    from n in x.AddressTypes 
    where n.Name == "Main Office" 
    select n;

는 경우 이러한 쿼리가 실행,우리는 두 개의 항목에서 SQL 서버 절차 캐시:하나밖에 없으로 이며(7),및 다른으로 이며(11).지금 상상이 있다면 수백 수천 명의 다른 입력 문자열을 모두 다른 길이 있습니다.절차 캐시 될 것이 불필요하게 모든 종류의 가득하는 다른 계획에 대해 정확한 쿼리가 있습니다.

여기: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=363290

나는 생각한 프로 LINQ 인수 될 것으로 보인에서 나오는 사람들을 없는 역사와 함께 데이터베이스를 개발(일반).

특히 사용하는 경우 제품과 같은 대 DB 프로 또는 팀 Suite,많은 인수기 적용하지 않는,예를 들어:

열심히 유지하고 테스트:대을 제공합 구문 검사,스타일 검사 및 제약 조건 참조를 확인하고 더 많은.그것은 또한 단위 테스트 능력과 리팩터링 도구입니다.

LINQ 만든 진정한 단위 테스트용으로 불가능(내 마음)이것은 실패하는 산성 테스트입니다.

디버깅을 쉽게 LINQ 에서:왜?VS 할 수 있는 단계에서 관리되는 코드에서 정규의 디버깅 SPs.

로 컴파일된 하나의 DLL 보다는 오히려 배포 스크립트:다시 한번,VS 구조에 관해서는 그것을 건축할 수 있고 배포하는 전체 데이터베이스나 데이터 안전한 변경 됩니다.

는 방법을 배우게 할 필요가 없습 TSQL LINQ:지 않습니다,하지만 당신은 배우 LINQ-어디에 혜택을까요?

나는 진짜로 보지 않는 것으로 이해 이루어집니다.을 변경 할 수있는 뭔가가 분리할 수 있는 좋은 소리로 이론적으로,하지만 단지 때문에 변경 사항을 충족 계약을 의미하지 않는 반환하는 올바른 결과를 얻을 수 있습니다.을 확인 할 수있는 무엇이 올바른 결과는 당신이 필요한 상황과를 얻을하는 컨텍스트에서 호출하는 코드입니다.

Um,느슨하게 결합한 앱의 궁극적인 목표는 모든 좋은 프로그래머로 그들은 정말 유연성 증가.을 변경할 수 있는 것에 격리는 환상적인,그리고 그것은 당신의 단위 테스트하는 것이 확인 그것은 여전히 반환한 적절한 결과입니다.

기 전에 당신은 모든 왓 보웨니웻 불교 사원,나는 생각 LINQ 에는 곳에는 그랜드 미래입니다.하지만,복잡한 데이터를 많이 사용하는 응용 프로그램을 생각하지 않는 그것을 준비하고의 장소를 저장합니다.이것은 추가로 에코 MVP 테크 에드에서 올해(그대로 남아 있습니다명).

편집:LINQ to SQL 저장 프로시저는 것은 뭔가가 나는 아직도 해야에 더 읽에 따라 내가 내가 변경할 수 있습니다 내상 통렬한 비판;)

LINQ 에는 새로운는 장소입니다.LINQ 발명되지 않는 대체 저장된 절차입니다.

나는 여기에 초점을 맞출 것이 어떤 성과 신화&다,그냥"LINQ to SQL",의 코스가 될 수 있는 완전히 잘못된;-)

(1)사람들이 말하는 LINQ 문 할 수 있"캐시"SQL server,그래서 그것도 잃지 않는 성능이다.부분적으로 진실하다."LINQ to SQL"실제로 런타임을 번역하 LINQ 구문을 TSQL 문.그래서 성능의 관점에서,하드 코딩 ADO.NET SQL 문을 차이가 없다 LINQ.

(2)주어진 예를 들어,고객 서비스 UI 에 있는"계정전달"기능이 있습니다.이 기능은 자체 업데이트할 수 있 10DB 테이블과 일부를 반환한 메시지를 포함하고 있습니다.LINQ,당신은 당신을 구축하는 설정의 문을 보내 중 하나로 배치하여 있음을 의미합니다.의 성능이 번역된 LINQ->TSQL 배치할 수 있는 거 경기 저장된 절차입니다.이유는?할 수 있기 때문에 조정의 최소 단위는 문서 저장된 따라 내장을 사용하여 SQL 프로파일과 실행 계획 도구,당신은 할 수 없습니다 이 LINQ.

요점은 이야기 할 때,하나의 DB 테이블 및 작은 세트의 데이터 CRUD,LINQ 로 SP.하지만 훨씬 더 복잡하고 논리,저장 프로시저는 것은 더 성과 tweakable.

(3)"LINQ to SQL"쉽게 만드는 초보자를 소개하는 성능 돼지입니다.어떤 수석 TSQL 사람이 말할 수 있을 사용하지 않는 경우 커서(기본적으로 사용하지 않아야 합니다 커서를 TSQL 에서 가장 많은 경우).LINQ 과 매력적인"foreach"루프 쿼리,그것은 그렇게 쉬운 초보자를 쓰는 이러한 코드:

foreach(Customer c in query)
{
  c.Country = "Wonder Land";
}
ctx.SubmitChanges();

당신이 볼 수있는 쉽게 알맞은 코드입니다 그래서 매력적입니다.하지만 후드,.NET runtime just 번 업데이트합니다.이 있는 경우에만 500 라인 이 500 라인 TSQL 배치;이 있는 경우 만 라인,이것은 히트합니다.물론,경험이 풍부한 사용자 없이 방법을 사용하여 이 작업,그러나,그것은 그렇게 쉬운 가을에서는 이 방법입니다.

최고의 코드가 없는 코드,그리고 저장 프로시저가 작성해야에서는 적어도 일부 코드에서는 데이터베이스 응용 프로그램에서 코드를 호출하는 반면,LINQ SQL 또는 LINQ to Entities,당신은 없다 추가 코드를 작성 넘어 다른 쿼리 고객께서는 인스턴스화 컨텍스트 객체입니다.

LINQ 확실히는 장소에서 응용 프로그램-특정 데이터베이스 및에서 작은 기업입니다.

그러나 대기업,중앙 데이터베이스의 허브 역할 일반적인 데이터 많은 신청을 위해,우리가 필요한 추상화입니다.우리는 필요를 중앙에서 보안을 관리와 쇼 액세스 역사입니다.우리는 할 수 있어야 하 영향 분석:제가 만약 작은 변화하는 데이터 모델을 제공하는 새로운 비즈니스,무엇을 쿼리를 변경해야 하고 어떤 응용 프로그램이 필요한 것을 다시 테스트?망 및 저장 프로시저 내게는다.는 경우 LINQ 할 수 있는 모든 것,우리의 프로그래머의 생산성,내가 그것을 환영--사람이 사용한 경험이 있는 그것의 종류에 환경은?

DBA 가 없는 자유를 변경 데이터 모델없이 강제로 당신 을 변경 코드를 컴파일합니다.가 저장 프로시저를 숨길 수 있습니다 종류의 변화 정도,이후 매개 변수 목록 결과를 설정(s) 에서 반환되는 절차 나타내 의 계약,그리고 내장될 수 있는 변 주위에,그냥 그렇게 오래로하는 계약서입니다 여전히 만났다.

나는 진짜로 보지 않는 것으로 이해 이루어집니다.을 변경 할 수있는 뭔가가 분리할 수 있는 좋은 소리로 이론적으로,하지만 단지 때문에 변경 사항을 충족 계약을 의미하지 않는 반환하는 올바른 결과를 얻을 수 있습니다.을 확인 할 수있는 무엇이 올바른 결과는 당신이 필요한 상황과를 얻을하는 컨텍스트에서 호출하는 코드입니다.

이럴 RAD=LINQ,RUP=저장되었습니다.근무한 큰 Fortune500 회사,몇 년 동안 많은 수준에서 관리를 비롯하여,그리고 솔직히,나는 결코량 RUP 개발자 할 RAD 개발.그들은 그렇게 사일로 그들은 매우 제한적 지식을 다른 수준에서의 과정입니다.을 가진 독립적인 환경,그것은 의미를 제공 Dba 제어 데이터를 통해 매우 특정 항목이 포인트이기 때문에,다른 사람을 솔직하게 알지 못하는 가장 좋은 방법을 달성하는 데이터를 관리할 수 있습니다.

그러나 대기업 이동 고통스럽게 느린에서 개발 경기장,그리고 이것은 매우 비용이 많이 듭니다.거기에 시간을 이동해야하는 경우 빠른 시간과 비용을 모두 절약 및 LINQ 제공하는 것에 더 스페이드입니다.

때로는 생각하는 Dba 는 편견에 대해 LINQ 느끼기 때문에 그것을 위협하는 자신의 직업 보안입니다.그러나는 짐승의 특성,신사 숙녀 여러분.

나는 당신이 필요하다고 생각하여 가로되던 아무것도 현실이다.

A)쓰기에서 모든 논리 linq 의 데이터베이스에 적용하기 때문에만 응용 프로그램를 소비할 수 있습니다.

B)저는 확신하지 않는 객체 모델링은 더 좋은 관계형 모델링 anyway.

C)테스트 및 개발은 저장된 절차에는 SQL 지옥의 많은 보다 빠르게 컴파일을 편집기에서 어떤 Visual Studio environment.당신은 단지 편집,F5 와 충돌을 선택하고 떨어져 있습니다.

D)를 쉽게 관리할 수 있고 배포하는 저장 프로시저는 것보다 어셈블리..당신은 파일을 서버에 F5...

E)Linq to sql 에서는 여전히 쓰는 엉터리 코드는 때에는 당신이 기대하지 않습니다.

솔직히 제가 생각하는 궁극적인 것 MS 을 증강하는 t-sql 을 할 수 있도록 조 투사 impliclitly 방법 linq 않습니다.t-sql 알아야 하는 경우에 당신은 하고 싶다.lineitems.부분이,예를 들어.

LINQ 지 않의 사용을 금지하고 저장합니다.내가 사용되는 혼합 모드 LINQ-SQL LINQ-storedproc.개인적으로,나를 써야 하지 않는 저장되었습니다....pwet-tu.

또한 거의 문제를 가능 2.0rollback.나를 믿는 나에게 일어난 몇 번 그래서 나는 확실히 그것은 다른 사람에 일어났다.

또한 동의하는 추상적이 최고입니다.와 함께 사실,원래의 목적 ORM 확인하는 것입 RDBMS 일 잘하는 OO 개념이 있습니다.그러나,만약 모든 것이 잘 동작하기 전에 LINQ 함으로써을 벗어나는 비트에서 OO 개념 다음 나사'em.개념과 현실을 항상 맞은 매우 중요합니다.지가 없 호전적인 열심당습니다.

나는 가정을 의미 Linq to Sql

한 CRUD 명령 그것은 쉬운 프로파일 성능의 저장 프로시저를 대어떤 기술입니다.이 경우 어떤 차이점은 무시됩니다.Try 프로파일링에 대해 5(간단한 형식)객체를 필드 100,000 선택한 쿼리를 찾는 경우가 있습니다.

다른 한편으로 실격으로 차단기가 될 것입니다 질문에는지 당신은 편안한 느낌을 귀하의 비즈니스를 넣어 논리에 데이터베이스나지 않는 인수에 대하여 저장합니다.

에 따르면 전문가가 정의 LINQ 로토바고 SP 자동차.만약 당신이 가고 싶은 짧은 여행을 위해 그만의 작은 승객(이 경우 2),가 정상적으로 LINQ.하지만 경우에 당신이 가고 싶은 여행까지 즐길 수 있는 밴드,내 생각을 선택해야 합니다.

결론적으로 사이의 선택,오토바이나 자동차에 따라 경로(사업),길이(time),그리고 승객(data)를 사용하셔도 됩니다.

그것을 희망하는 데 도움이,내가 잘못 될 수 있습니다.:D

이 모든 답변으로 기대 LINQ 은 주로 이야기에 대한 용이성의 개발이 더 많거나 적은 연결하는 가난한 품질의 코딩 또는 게으름에 코딩이다.내가 좋아하는 것만 있습니다.

어떤 장점 또는 Linq,읽기 쉽게 테스트,디버그 등,하지만 이들은 어디에 연결되어 최종출력이나 최종 사용자에게 있습니다.이것은 항상 원인 문제는 최종 사용자 사용하고 있습니다.무엇이 포인트 적재에서 많은 것을 기억하고 다음에 적용하는 필터에서 사용 LINQ?

다시 TypeSafety,은 주의"우리가 주의를 방지하는 잘못된 형변환"이는 다시 가난 품질을 우리는 노력을 향상시킬 사용하여 linq.이 경우에도 어떤 경우에 데이터베이스의 변화,예를 들어,문자열의 크기 열한 다음 linq 필요를 다시 컴파일하지 않을 것이라는 점을 특징이 없는..보았습니다.

지만,우리가 발견한 좋은,달콤한,흥미로운 등과 함께 작업하는 동안 LINQ,그것은 전단의 단점을 만드는 게으른 개발자:)증명 1000 배는것은 나쁜 될 수 있음(최악)에 비해 성능을 저장되었습니다.

요.나는 열심히 노력하고.:)

에 대한 간단한 CRUD 작업으로 하나의 데이터 액세스 포인트 말할 것에 대한 LINQ 에는 경우에 당신은 편안한 느낌으로 구문입니다.더 복잡한 논리는 내 생각 sprocs 더 efficiant 성능한 경우에 좋은 T-SQL 및 고급 작업입니다.당신은 또한에서 도움을 튜닝,SQL 서버 프로파일러,디버깅에서 검색 SSMS etc.

저장 프로시저하게 테스트하고 쉽게 변경할 수 있습니다 쿼리를 만지지 않고 응용 프로그램 코드입니다.또한 linq,데이터를 의미하지 않는 그것의 오른쪽 데이터입니다.및 테스트 데이터의 정확성을 의미 응용 프로그램을 실행하지 저장 프로시저를 쉽게 테스트를 만지지 않고 응용 프로그램.

결과될 수 있습으로 요약

LinqToSql 을 위한 작은 사이트 및 프로토타입을 제작할 수 있습니다.그것은 정말 시간을 절약에 대한 프로토타이핑입니다.

Sps:보편적입니다.나는 미세 조정할 수 있습니다 내 쿼리와 항상 확인 ActualExecutionPlan/EstimatedExecutionPlan.

Create PROCEDURE userInfoProcedure
    -- Add the parameters for the stored procedure here
    @FirstName varchar,
    @LastName varchar
AS
BEGIN

    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT FirstName  , LastName,Age from UserInfo where FirstName=@FirstName
    and LastName=@FirstName
END
GO

http://www.totaldotnet.com/Article/ShowArticle121_StoreProcBasic.aspx

모두 LINQ 및 SQL 그들의 장소입니다.모두가 자신의 단점과 장점이 있습니다.

때로는 복잡한 데이터를 검색해야 할 수 있습 저장되었습니다.때로는 당신도 다른 사람들을 사용하여 저장 proc 에서 Sql 서버 관리 Studio.

Linq 하는 엔티티에 대 한 좋은 빠른 CRUD 개발.

할 수 있는 확신을 구축을 사용하여 응용 프로그램 중 하나만다.또는 당신은 그것을 혼합 할 수 있습니다.그것은 모두 아래로 당신의 요구 사항을 충족합니다.그러나 SQL 저장되었을 것이 멀리 가지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top