13

필자는 지난주 Linq가 SQL이 죽었다는 블로그 소설을 읽었습니다. [EF와 Linq를 엔티티로 오래 살았습니다]. 그러나 MSDN에 대한 개요를 읽었을 때 Linq가 Entity에게 Linq가 SQL 쿼리를 생성하는 방식으로 eSQL을 생성하는 것처럼 보였습니다.Entity Framework 및 LINQ To SQL - 충돌이 발생 했습니까?

이제 SQL Server가 아직 ODBMS가 아니기 때문에 기본 구현이 여전히 관계형 저장소이므로 일부 시점에서 Entity 프레임 워크가 SQL 쿼리로 변환해야합니다. Linq to SQL 문제 (m : m 관계, SQL 서버 지원 등)를 수정하고 이러한 쿼리를 생성하는 계층에서 Linq를 SQL에 사용하는 것이 어떻습니까?

성능 때문이거나 EF가 eSQL 문을 SQL로 변환하는 다른 방법을 사용하고 있습니까?

EF에서 린크 (Linq)를 익히기에 자연스럽게 적응 한 것처럼 보였습니다.

댓글?

답변

15

그것은 엔티티 프레임 워크가 가지고있는 주목할 가치가있다 (적어도) 소비되는 세 가지 방법 : 엔터티 클라이언트 개체를 통해 서비스를 통해 엔티티 클라이언트 개체를 통해 서비스를 통해 엔티티

  • 법인 SQL에

    • LINQ (고전 ADO.NET과 가장 유사한) 법인 클라이언트 명령 개체를 사용하여
    • 법인 SQL

    법인 클라이언트는 궁극적으로 ESQL 명령의 표현 (에서 밖으로 뱉어 특정 RDBMS에 대한 ADO.NET Provider가 상점 특정 SQL로 변환 할 책임이있는 표준 데이터베이스 독립형)입니다. 이것은 적절한 모델의 IMHO입니다. 수년에 걸쳐 각 상점에 훌륭한 ADO.NET Providers를 제작하는 데 많은 시간이 투자되었습니다. 계속 투자 될 것입니다.

    Entity Framework는 많은 상점과 많은 ADO.NET Providers와 함께 작동해야하므로 Entity Client가 저장소별로 생성하는 항목을 쉽게 최적화 할 수있는 범위가 적습니다 (최소한 - v1을 사용하는 곳) . LINQ SQL에 팀은 해결하기 훨씬 작은 문제가 있었다 - 더 쉽게 저장 특정 물건을 할 수 따라서 "유일한 SQL 서버와 함께 작동"합니다. 나는 EF 팀이 EF에서 SQL Server로 L2S보다 덜 효율적으로 TSQL을 생성하고 V2를 개선하려고 노력하고있는 경우가 있다는 것을 EF 팀이 알고 있음을 알고 있습니다.

    흥미롭게도이 모델은 새로운 기능이 엔티티 클라이언트와 저장소에 대한 ADO.NET 제공자 사이에 추가 할 수 있습니다. 이러한 "포장 업체는"로깅, 감사, 보안, 캐싱 등의 서비스를 추가 할 수 있습니다. 이것은 http://blogs.msdn.com/efdesign/archive/2008/07/09/transparent-caching-support-in-the-entity-framework.aspx

    에서 V2 기능으로 논의됩니다. 더 큰 그림에서 보면 L2S TSQL 생성을 Entity Framework의 아키 텍처에 추가하려고 시도하는 것이 엄청나게 어렵고 실제로 제한적이라는 것을 알 수 있습니다.

  • 1

    Linq to SQL과 Entity Framework의 큰 차이점은 EF는 Entity Data Model (EDM)을 구현하고 있으며 ADO.NET Data Services (일명 Astoria)와 같이 EDM을 기반으로 구축 된 다른 제품이 있다는 것입니다.

    EDM은 이제 RDP 위에 CRUD를 표준화하는 데 사용되는 Open Data Protocol (OData http://odata.org/)이라는 새로운 사양으로 AtomPub를 확장하는 데 사용됩니다. LINQ 쿼리를 변환 할 때

    +7

    그리고 그 이유는 많은 사람들이 Linq SQL에 더 좋다고 생각합니다! –

    5

    사실, EF는 EntitySQL를 생성하지 않습니다.EF에는 CQT 또는 표준 쿼리 트리라고하는 모든 쿼리에 대한 데이터 구조 기반의 표현이 있습니다. LINQ 변환기와 EntitySQL 파서는 모두 CQT를 생성하며 나머지 쿼리 변환 파이프 라인은 CQT (및 기타 내부 중간 형식)를 사용합니다.이 변환은 ADO.NET 공급자 (저장소 수준 CQT) 이를 백엔드의 SQL 언어로 번역하는 역할을합니다. 따라서 경로는 LINQ -> CQT -> SQL 또는 EntitySQL -> CQT -> SQL입니다.

    관련 문제