먼저, 새 프로젝트를 시작하는 경우 Entity Framework ( "EF")를 사용하십시오. 이제 Linq to SQL보다 훨씬 더 나은 SQL을 생성하고 Linq to SQL ( " L2S "). .NET 4.0 릴리스부터 Linq to SQL은 쓸모없는 기술이라고 생각합니다. MS는 L2S 개발을 계속하지 않는 것에 대해 매우 개방적이었습니다.
1) 성능
대답하기가 까다 롭습니다. 대부분의 단일 엔터티 작업 ( CRUD )의 경우 세 기술 모두에서 동등한 성능을 얻을 수 있습니다. EF와 Linq to SQL을 최대한 활용하기 위해 어떻게 작동하는지 알아야합니다. 폴링 쿼리와 같은 대량 작업의 경우 프레임 워크가 지속적으로 SQL을 재생성 할 필요가 없도록 EF / L2S가 엔티티 쿼리를 "컴파일"하도록하거나 확장 성 문제가 발생할 수 있습니다. (편집 참조)
대량의 데이터를 업데이트하는 대량 업데이트의 경우 업데이트를 수행하기 위해 유선으로 데이터를 마샬링 할 필요가 없으므로 원시 SQL 또는 저장 프로 시저가 항상 ORM 솔루션보다 성능이 우수합니다.
2) 개발 속도
대부분의 시나리오에서 EF는 개발 속도와 관련하여 알몸의 SQL / 저장된 프로세스를 날려 버릴 것입니다. EF 디자이너는 모델이 변경 될 때 (요청시) 데이터베이스에서 모델을 업데이트 할 수 있으므로 객체 코드와 데이터베이스 코드간에 동기화 문제가 발생하지 않습니다. ORM 사용을 고려하지 않을 유일한 시간은 업데이트를 수행하지 않는보고 / 대시 보드 유형 응용 프로그램을 수행하거나 데이터베이스에서 원시 데이터 유지 관리 작업을 수행하기 위해 응용 프로그램을 만드는 경우입니다.
3) 깔끔하고 유지 가능한 코드
EF는 SQL / 프로세스를 능가합니다. 관계가 모델링 되었기 때문에 코드 조인은 상대적으로 드물다. 엔터티의 관계는 대부분의 쿼리에서 독자에게 거의 자명합니다. 실제로 데이터에서 발생하는 상황을 이해하기 위해 계층에서 계층으로 또는 여러 SQL / 중간 계층을 거쳐야하는 것보다 더 나쁜 것은 없습니다. EF는 데이터 모델을 매우 강력한 방식으로 코드에 제공합니다.
4) 유연성
저장된 procs와 raw SQL은 더 "유연하다". sprocs 및 SQL을 활용하여 홀수 특정 사례에 대해 더 빠른 쿼리를 생성 할 수 있으며, 또는 ORM보다 기본 DB 기능을보다 쉽게 활용할 수 있습니다.
5) 전체
저장 프로 시저를 사용하여 ORM을 선택하는 잘못된 이분법에 빠지지 마십시오. 동일한 응용 프로그램에서 둘 다 사용할 수 있으며 아마도 사용해야합니다. 대량 작업은 저장 프로 시저 또는 SQL (실제로 EF에서 호출 할 수 있음)로 진행되어야하며 CRUD 작업 및 대부분의 중간 계층 요구에 EF를 사용해야합니다. 보고서 작성에 SQL을 사용하도록 선택했을 수 있습니다. 이야기의 도덕은 항상 그렇듯이 같아요. 작업에 적합한 도구를 사용하십시오. 그러나 EF는 요즘 매우 좋습니다 (.NET 4.0 기준). 실시간으로 읽고 깊이 이해하면서 놀라운 고성능 앱을 쉽게 만들 수 있습니다.
편집 : EF 5는 자동 컴파일 된 LINQ 쿼리를 사용하여이 부분을 약간 단순화 하지만 실제 대량 작업을 위해서는 실제 세계에서 가장 적합한 것을 테스트하고 분석해야합니다.