.net - stored - 엔터티 프레임 워크 및 LINQ to SQL




lazyloadingenabled entity framework 6 (11)

이제 VS2008 SP1과 함께 .NET v3.5 SP1이 릴리스되었으므로 이제 .NET 엔터티 프레임 워크에 액세스 할 수 있습니다.

내 질문은 이것입니다. Entity Framework와 LINQ to SQL을 ORM으로 사용하기로 결정할 때 차이점은 무엇입니까?

내가 이해하는 방식으로 Entity Framework (LINQ to Entities와 함께 사용되는 경우)는 LINQ to SQL의 '큰 형제'입니까? 이 경우 어떤 장점이 있습니까? LINQ to SQL이 독자적으로 할 수없는 것은 무엇입니까?


Linq-to-SQL

SQL Server 만 지원하는 공급자입니다. SQL Server 데이터베이스 테이블을 .NET 개체에 매핑하는 매핑 기술입니다. ORM-Object-Relational Mapper에 대한 Microsoft의 첫 번째 시도입니다.

Linq-to- 엔티티

동일한 아이디어이지만 ORM과 같이 백그라운드에서 Entity Framework를 사용합니다. 다시 Microsoft에서 제공하는 여러 데이터베이스를 지원합니다. Entity Framework의 주요 장점은 개발자가 다른 데이터베이스에서 작업을 수행하기 위해 구문을 배울 필요가없는 모든 데이터베이스에서 작업 할 수 있다는 것입니다.

내 개인적인 경험에 따르면 Ef는 람다로 작성된 EF 이유 LINQ 언어와 비교할 때 LINQ의 성능이 낫습니다 (SQL에 대해 전혀 모르는 경우).


LINQ to SQL

  1. 동종 데이터 소스 : SQL Server
  2. 데이터 구조가 잘 설계된 소규모 프로젝트에만 권장
  3. SqlMetal.exe로 다시 압축하지 않고도 매핑을 변경할 수 있습니다.
  4. .dbml (데이터베이스 마크 업 언어)
  5. 테이블과 클래스 간 일대일 매핑
  6. TPH 상속 지원
  7. 복잡한 유형을 지원하지 않습니다
  8. 스토리지 우선 접근
  9. 데이터베이스의 데이터베이스 중심보기
  10. C # 팀에 의해 생성
  11. 지원되지만 더 이상의 개선은 아닙니다

엔터티 프레임 워크

  1. 이기종 데이터 소스 : 많은 데이터 제공 업체 지원
  2. 다음을 제외한 모든 새 프로젝트에 권장됩니다.
    • 작은 것 (LINQ to SQL)
    • 데이터 소스가 플랫 파일 인 경우 (ADO.NET)
  3. 모델을 설정하고 파일을 매핑 할 때 재 계산없이 매핑을 변경할 수 있음 메타 데이터 아티팩트 프로세스를 출력 디렉토리로 복사
  4. 다음을 포함하는 .edmx (Entity Data Model) :
    • SSDL (스토리지 스키마 정의 언어)
    • CSDL (개념적 스키마 정의 언어)
    • MSL (매핑 사양 언어)
  5. 테이블과 클래스 간 일대일, 일대 다, 다 대일 매핑
  6. 상속을 지원합니다 :
    • TPH (계층 당 테이블)
    • TPT (테이블 당 유형)
    • TPC (콘크리트 클래스 당 테이블)
  7. 복잡한 유형을 지원합니다
  8. 코드 우선, 모델 우선, 스토리지 우선 접근
  9. 데이터베이스의 응용 프로그램 중심보기
  10. SQL Server 팀이 작성
  11. Microsoft Data API의 미래

참조 :


EF를 사용할 때 동일한 데이터베이스 모델 내에서 여러 데이터베이스를 사용할 수 없다는 것을 알았습니다. 그러나 linq2sql에서는 스키마 이름 앞에 데이터베이스 이름을 붙여서 할 수 있습니다.

이것이 원래 linq2sql로 작업을 시작한 이유 중 하나였습니다. EF가 아직이 기능을 허용했는지는 모르겠지만이를 허용하지 않았 음을 읽은 것을 기억합니다.


Entity Framework에 대한 나의 경험은 별보다 적습니다. 먼저 EF 기본 클래스를 상속해야하므로 POCO에 작별 인사를하십시오. 디자인은 EF 주위에 있어야합니다. LinqtoSQL을 사용하면 기존 비즈니스 객체를 사용할 수 있습니다. 또한 게으른 로딩이 없으므로 직접 구현해야합니다. POCO 및 지연 로딩을 사용하기위한 몇 가지 해결 방법이 있지만 EF가 아직 준비되지 않았기 때문에 IMHO가 존재합니다. 4.0 이후에 다시 올 계획입니다


Linq-to-SQL을 사용하는 큰 프로젝트가있는 고객을 위해 일하고 있습니다. Entity Framework는 당시 주요 기능이 부족하고 Linq-to-SQL의 성능이 훨씬 좋았 기 때문에 프로젝트가 시작되었을 때 확실한 선택이었습니다.

이제 EF가 발전했으며 Linq-to-SQL에는 비동기 지원이 부족하여 확장 성이 뛰어난 서비스에 적합합니다. 초당 100 개 이상의 요청이 있으며 데이터베이스를 최적화했지만 대부분의 쿼리는 여전히 완료하는 데 몇 밀리 초가 걸립니다. 동기식 데이터베이스 호출로 인해 스레드가 차단되어 다른 요청에 사용할 수 없습니다.

우리는이 기능만을 위해 Entity Framework로 전환하려고합니다. Microsoft가 Linq-to-SQL에 대한 비동기 지원을 구현하지 않았거나 커뮤니티가이를 수행 할 수 있도록 오픈 소스로 구현하지 않은 것은 부끄러운 일입니다.

부록 2018 년 12 월 : Microsoft는 .NET Core로 전환하고 있으며 Linq-2-SQL은 .NET Core에서 지원되지 않으므로 향후 EF.Core로 마이그레이션 할 수 있도록 EF로 이동해야합니다.

LLBLGen 과 같은 다른 옵션도 고려해야합니다. 이미 오랜 기간 존재하고 MS 데이터 솔루션 (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core)보다 미래에 더 입증 된 성숙한 ORM 솔루션입니다.


Linq2Sql이 귀하의 요구에 맞지 않으면 데이터베이스가 상당히 풍부하거나 잘못 설계되었습니다. Linq2Sql을 사용하는 크고 작은 웹 사이트가 약 10 개 있습니다. 엔티티 프레임 워크를 여러 번 보았지만 Linq2Sql을 통해 Entity 프레임 워크를 사용하는 좋은 이유를 찾을 수 없습니다. 즉, 데이터베이스를 모델로 사용하려고하므로 모델과 데이터베이스 사이에 1 대 1 매핑이 이미 있습니다.

현재 직장에는 200 개 이상의 테이블이있는 데이터베이스가 있습니다. 솔루션이 많이있는 오래된 데이터베이스이므로 Linq2Sql보다 Entity Framework의 이점을 볼 수 있지만 데이터베이스는 응용 프로그램의 엔진이므로 데이터베이스가 잘못 설계되고 내 응용 프로그램이 느리기 때문에 데이터베이스를 다시 디자인하는 것이 좋습니다. 또한 느려질 것입니다. 이러한 데이터베이스에서 Entity Framework를 사용하면 잘못된 모델을 위장하는 빠른 수정처럼 보이지만 이러한 데이터베이스에서 얻은 나쁜 성능을 위장 할 수는 없습니다.


고유 한 SQL 2008 데이터 유형을 아직 지원하지 않습니다. 내 관점과의 차이점은 Entity가 향후 릴리스에서 내 지리적 데이터 유형을 중심으로 모델을 구성 할 수있는 기회가 있으며 Linq to SQL은 포기하지 않을 것입니다.

nHibernate 또는 OpenAccess의 최신 기능을 궁금해하십시오.


나는 빠르고 더러운 대답은

  • LINQ to SQL은 빠르고 쉬운 방법입니다. 즉, 더 작은 작업을 수행하면 더 빨리 가고 더 빨리 전달할 수 있습니다.
  • Entity Framework는이를 수행 할 수있는 모든 방법을 사용할 수 있습니다. 즉, 더 큰 작업을 수행하는 경우 더 많은 시간이 걸리고 개발 속도가 느리고 유연성이 향상됩니다.

여기에 대한 답변은 Linq2Sql과 EF의 많은 차이점을 다루었지만 많은 주목을받지 않은 핵심 사항이 있습니다. Linq2Sql은 SQL Server 만 지원하는 반면 EF는 다음 RDBMS에 대한 공급자를 제공합니다.

Microsoft 제공 :

  • SQL Server, OBDC 및 OLE DB 용 ADO.NET 드라이버

타사 제공 업체를 통해 :

  • MySQL
  • 신탁
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • 인포믹스
  • U2
  • 사이베이스
  • Synergex
  • 파이어 버드
  • Npgsql

몇 가지를 말하면

따라서 EF는 관계형 데이터 저장소에 대한 강력한 프로그래밍 추상화가되므로 개발자는 기본 데이터 저장소에 관계없이 일관된 프로그래밍 모델을 사용할 수 있습니다. 이 기능은 광범위한 일반 RDBMS와 상호 운용 할 수있는 제품을 개발할 때 매우 유용 할 수 있습니다.

추상화가 유용한 또 다른 상황은 조직 내의 여러 다른 고객 또는 다른 비즈니스 단위와 함께 작업하는 개발 팀의 일원이되어야하며 RDBMS의 수를 줄여 개발자의 생산성을 향상시키려는 경우입니다. 다양한 RDBMS에서 다양한 애플리케이션을 지원하기 위해 익숙합니다.


중간에 이상한 일이 없어 빠르게 무언가를 개발해야하고 테이블을 나타내는 엔티티가있는 시설이 필요하다고 생각합니다.

Linq2Sql은 LinQ와 함께 사용하면 훌륭한 개발 타이밍을 제공합니다.






linq-to-sql