문제

새 프로젝트를 시작하는 경우 ORM NHibernate 또는 LINQ에 무엇을 사용하고 그 이유는 무엇입니까?각각의 장단점은 무엇입니까?

편집하다:LINQ뿐만 아니라 LINQ to SQL(@Jon Limjap에게 감사드립니다)

도움이 되었습니까?

해결책

나는 NHibernate 대신에 내가 꽤 좋다고 생각하는 WilsonORM에 대해 생각하고 있다는 점을 제외하고는 매우 유사한 질문을 스스로에게 물었습니다.

제가 보기엔 중요한 차이점이 많이 있는 것 같습니다.

링크:

  • 완전한 ORM 도구는 아닙니다(최신 Entity 프레임워크와 같은 추가 라이브러리를 사용하면 얻을 수 있습니다. 개인적으로 MS의 이 최신 기술 아키텍처는 다른 ORM 프레임워크와 비교할 때 약 10년 정도 된 것으로 생각합니다).
  • 주로 intellisense를 지원하는 "언어"를 쿼리합니다(컴파일러는 쿼리 구문을 확인합니다).
  • 주로 Microsoft SQL Server에서 사용됩니다.
  • 비공개 소스입니다

NH절전 모드:

  • ORM 도구입니다
  • Intellisense가 없으면 쿼리 언어가 매우 제한적입니다.
  • DB 공급자가 있는 거의 모든 DBMS에서 사용할 수 있습니다.
  • 오픈 소스입니다

그것은 정말로 달려있습니다.객체를 구성하고 작업하고 마지막에 변경 사항을 유지해야 하는 리치(Windows) 데스크톱 애플리케이션을 개발하는 경우 NHibernate와 같은 ORM 프레임워크를 권장합니다.

일반적으로 데이터를 쿼리하고 가끔 일부 데이터를 DB에 다시 쓰는 웹 애플리케이션을 개발하는 경우 Linq와 같은 좋은 쿼리 언어를 권장합니다.

항상 그렇듯이 상황에 따라 다릅니다.:-)

다른 팁

어...거기에 NHibernate용 LINQ.

아마도 당신이 의미하는 것은 무엇을 사용할 것인가입니다.

  • LINQ에서 SQL로
  • NH절전 모드

나는 NHibernate를 선호합니다.

LINQ to SQL은 상당히 가볍지만 테이블 구조에 매핑할 수 있는 개체 정의 유형 측면에서 매우 유연한 NHibernate와는 달리 데이터 구조와 좀 더 긴밀하게 결합됩니다.

물론 LINQ to SQL이 전혀 쓸모가 없다는 말은 아닙니다.바로 이 웹사이트가 그것을 사용합니다.데이터베이스 스키마가 크지 않은 소규모 애플리케이션을 시작하고 실행하는 것이 매우 유용하다고 생각합니다.

NHibernate로 시작하는 것은 나쁜 생각입니다.적절한 설정에서만 좋은 성능을 보여줍니다.대규모 프로젝트에는 EFv4를 사용하고 중소 규모에는 L2S(아마도 타사 제품)를 사용해 보세요.이 제품들은 NHibernate보다 더 편리하고 유연하며 빠르게 시작할 수 있습니다.

완전한 목록은 아닙니다

linqtosql pro :

  • 더 나은 도구 지원
  • 좋은 Linq 공급자
  • db-schema == 클래스일 때 시작하기 쉽습니다.

범죄자:

  • 유연하지 않음(예: db-schema != 클래스)
  • MS SQL Server만 지원
  • 계단식 연결 없음(저장, 업데이트...참조된 개체에 계단식으로 적용되지 않음)

nhibernate pro :

  • 많은 RDBMS가 ootb를 지원합니다.
  • 풍부한 기능
  • 거의 모든 코너 케이스에 매우 유연함
  • 오픈 소스

범죄자:

  • 시작하기가 그리 쉽지는 않다
  • MS 출신이 아닌
  • 도구는 많지만 검색해야 합니다.

2개의 ORM 사이

다음과 같은 경우 LinqToSql을 선택합니다.

  • db-스키마 == 클래스
  • MS SQL Server만 사용하세요
  • 상점에서는 MS 제품만 허용됩니다.

다음과 같은 경우 Nhibernate를 선택하겠습니다.

  • 더욱 풍부한 객체 모델
  • 레거시 DB 스키마
  • MS SQL Server 이외의 DB 또는 다중 지원
  • 성능이 중요합니다(NH에는 LinqToSql보다 성능을 최적화하는 기능이 더 많다고 생각합니다).

메모:이것은 내 개인적인 견해입니다.저는 주로 개체 모델이 SQL보다 많은 도움이 되는 (미친) 레거시 DB와 복잡한 ETL 작업을 다룹니다.

나는 NHibernate를 사용하지도 않고 알지도 못합니다. 단지 간증을 하고 싶습니다.저는 MySQL과 PostgreSQL 데이터베이스를 사용하면서 약 2년 전부터 LINQ to SQL을 사용하고 있습니다. DbLinq Windows에서는 다음을 사용하여 단핵증 Linux 및 Mac OS X에서).

따라서 LINQ to SQL은 Microsoft 제품에만 국한되지 않습니다.

LINQ to SQL은 중소 규모 프로젝트나 데이터베이스 구조를 완벽하게 제어할 수 있는 대규모 프로젝트에 매우 적합하다는 것을 확인할 수 있습니다.리뷰에서 알 수 있듯이 LINQ to SQL에는 데이터베이스 테이블과 엔터티 클래스 간에 직접 매핑이 없을 때 부적절한 도구가 되는 몇 가지 제한 사항이 있습니다.

메모 :LINQ to SQL은 다대다 관계를 지원하지 않습니다. 하지만 이는 몇 개의 코드 줄로 쉽게 달성할 수 있습니다.

NHibernate의 가장 큰 단점은 메소드 호출.SQL로 변환할 수 없습니다.이를 방지하려면 표현 트리를 다시 만들어야 하는데 이는 어려운 작업입니다.

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