문제

나는 디자인중인 새로운 웹 기반 프로젝트에 어떤 데이터 계층을 사용할 것인지 조사해 왔으며 LINQ를 SQL에 통합하는 것을보고 싶어합니다. 명백한 단순성, 유연성 및 디자이너 지원은 실제로 매력적이며 SQL Server와의 암묵적 타이는 괜찮습니다.

그러나 최근 LINQ에서 SQL이 ADO.NET 팀에 전달 된 Entity Framework에 뒷좌석을 차지할 것이라고 발표했습니다.http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-linq-linq-loadmap.aspx). 물론, 그것은 미래에 지원 될 것이지만, 훨씬 더 많은 개발 작업이 보일 것 같지는 않습니다.

이를 염두에 두고이 기술을 내 프로젝트에 사용하는 것이 좋습니다. 아니면 대체 ORM (NHibernate?)을 선택하거나 일반적인 DAL을 수동으로 코딩 할 가치가 있습니까?

프로젝트 자체는 ASP.NET 및 SQL Server 2005/2008 기반이며 MVC가 여전히 베타 버전에 있어도 MVC를 사용할 수 있습니다. 개인 프로젝트이며 데이터베이스는 지나치게 복잡하지 않으며 주로 .NET Future Tech를 보는 프로토 타입으로 사용됩니다. 나는 미래의 프로젝트를 제가 이것으로부터 배운 것에 근거 할 것이므로, 내가 선택하는 것은 앞으로 더 큰 솔루션에 영향을 줄 것입니다.

그리고 그렇습니다. Microsoft가 어쨌든 내일 완전히 새로운 데이터 액세스 기술을 이끌어 낼 것임을 알고 있습니다! ;)

도움이 되었습니까?

해결책

글쎄, 그것은 이미 여기에서 답으로 덮여 있습니다 (일부 흥미로운 관점도 이미). 어쨌든 다시 말할 것입니다 ..

LINQ에서 SQL (L2S)은 매우 다재다능하지만 내 관점에서 너무 기본적인 느낌이 듭니다. 대부분의 경우 간단한 일을하는 데 좋은 일을하지만 조금 더 물어 보자 마자 비쌉니다. 이것은 전혀 나쁜 것이 아닙니다. 나는 실제로 LINQ에서 SQL이 실제로 엔티티 프레임 워크를 훌륭하게 공급한다고 생각합니다.

예를 들어 Linqdatasource로 자동 페이징을하십시오. /그룹별로 주문을 지정하지 않으면 매우 경제적입니다. 주문 또는 그룹화를 믹스에 던지면 성능이 급증하기 시작합니다 (매우 수다가됩니다). 그런 다음 당신은 거의 자신의 페이징 구현을 작성해야합니다 (매우 어렵지는 않지만 인정할 것입니다).

L2가 생성 된 T-SQL의 품질 측면에서 L2S가 엔티티 프레임 워크보다 유리하다는 것을 가장 먼저 인정할 것입니다 (L2S는 SQL Server를 쿼리하기 위해 구체적으로 구축 되었기 때문에 개념적으로 그리고 상징적으로, 많은 LINQ입니다. SQL은 EF와 유사하지만 벽에 부딪히는 곳은 더 복잡한 구현 요구 사항에 대한 요구와 고려 사항을 확대하고 있습니다.

처음부터 시작하여 개인 개발 시간을 전념하기로 선택했다면 엔티티 프레임 워크를 선택했습니다. 흥미롭게도, 나는 L2S를 사용하는 순간에 프로젝트를 진행하고 있으며 NAD 손잡이가 무거운 하중을 확장하도록 설계되었지만, 더 "창의적인"요구 사항을 충족하면 SQL Metal에서 종종 확장해야합니다. (예 : 다수의 관계).

그래서 .. 간단히 말해서 .. 나는 이에 접근 할 것이다 :

a) LINQ에서 SQL을 소개 (Microsoft의 ORM 패턴 및 기술에)로 배우십시오. 엔티티 프레임 워크와 공유되는 대부분의 기본 사항과 LINQ 스타일 쿼리의 맛 (만약의 맛이있는 취향. T-SQL의 배경)

b) LINQ에서 SQL에 대한 핸들이 있으면 Entity 프레임 워크로 점프하여 추가 혜택 (ESQL 등)을 배우는 것이 좋습니다.

c) 두 가지 모두에서 개념 증명 프로젝트를 구현하고 결과를 비교하십시오.

다른 팁

nhibernate를 선택하십시오. 그것은 개념이나 실제 ORM으로 한동안 머무를 것입니다. 따라서 두 가지를 모두 배우는 것이 유용합니다.

IMO,이 모든 것이 실제로 비율이 날아갔습니다.

Microsoft는 LINQ에서 SQL이 죽을 것이라고 말하지 않았습니다. 그들은 그것이 엔티티 프레임 워크로 병합 될 것이라고 더 많이 나타 냈습니다.

Entity 프레임 워크를 솔루션으로 사용하는 데 중점을두고 LINQ에서 SQL에서 SQL이 많이 롤링 될 것이라는 것을 알고 있습니다.

어쨌든 지금은 그다지 큰 차이가 없습니다. 가장 큰 불만은 엔티티 프레임 워크가 가벼운 것이 아니라는 것입니다. 당신이 당신의 계층들 사이에 좋은 분리가있는 한 그것은 정말로 중요합니까?

L2S는 IMHO입니다. 당신이 말했듯이, 당신이 말했듯이, 아무데도 가지 않습니다. 제가 일하는 회사는 데이터 액세스의 표준으로 만들었으며 Little 5 사용자 틈새 앱부터 1000 개 이상의 사용자 엔터프라이즈 앱에 이르기까지 모든 것을 사용하고 있습니다.

Subsonic 확인 :

http://subsonicproject.com/

나는 목표를 생각합니다 EDM LINQ에서 SQL보다 훨씬 큽니다. 당신이 간단한 ORM을 찾고 있다면 LINQ에서 SQL이 갈 길이라고 생각합니다. 관계형 구조가 있고 다른 고급 매핑을하는 데이터베이스 테이블과 관련하여 상속 구조를 가진 클래스를 구축하려는 경우 EDM이 좋은 선택 일 수 있습니다.

이 사이트는 LINQ에서 SQL을 사용하여 구축되었음을 언급 할 가치가 있습니다. Jeff는 StackoverFlow 팟 캐스트에서 사용하는 것에 대해 이야기했습니다.

L2S는 멋진 기술이며, 나는 결코 Old Ado로 돌아 가지 않을 것입니다.

그러나 당신이 언급했듯이, 그것은 L2E에 뒷좌석을 가져 가고 있습니다. L2는 유능한 것 이상이며 수많은 응용 프로그램을 만들었으며 엄청나게 기뻐했습니다. 그러나 그것이 더 이상 진보되지 않을 것이라고 들었습니다. 그래서 나는 L2E를 확인하러 갔다. 거의 SQL 상호 작용과 관련하여 동일한 것은, 여러 가지면에서 관계 처리에 대해 더 효율적으로 언급하지 않고 더 쉽다는 것을 알 수 있습니다. 그러한 유사점으로 L2E를 선택하는 것은 논리적으로 보입니다.

스위치를 만들고 두 프레임 워크를 비교하는 게시물을 썼습니다. http://naspinski.net/post/getting-started-with-linq-ter-entities.aspx

나는 당신 이이 프레임 워크 중 하나에 만족할 것이라는 것을 거의 보장 할 수 있습니다. 그들은 개발을위한 신의 선물입니다. 단순성과 오류 회피는 다음과 같습니다. 나는 L2E에 더 적극적으로 개발 될 것이기 때문에 개인적으로 L2E에 의지 할 것입니다.

나는 현재 웹 프로젝트에서 L2S를 크게 사용하고 있으며 N-Tier 데이터베이스 개발을 수행하는 가장 좋은 방법에 관한 가장 큰 끊임없는 문서가 있다고 생각합니다.

가장 먼저 당신이 선행을 깨닫는 데 필요한 것은 DataContext 객체입니다. 작업 단위만큼 오래 지속됩니다., 기간. 또한 DataContext는 상태가 없습니다. 이 두 교장을 잡으면 N-Tier 환경에서 LINQ를 사용하는 것이 잘 작동하기 시작합니다.

반면에, 당신은 많은 사람들이 LINQ를 사용하는 매우 나쁜 방법을 추천하는 것을 보게 될 것입니다. DataContext 정적으로 만들지 마십시오. 이것은 내가 일찍 저지른 실수이며 작동하지 않을 때까지 놀라운 일을했는데, 다른 세션을 가로 지르는 잘못된 데이터로 인해 절대적으로 끔찍했습니다. LINQ를 사용하는 대부분의 거대한 사람은 모든 문서에서 큰 대담한 문자로 작성되어야합니다. 또한 세션 변수에서 DataContext를 유지하는 것도 똑같이 나쁜 생각입니다.

LINQ와 함께 제가 운영 한 유일한 주요 불쾌한 불쾌한 것은 연결이 끊긴 업데이트를 수행 할 때 전체 통화에서 동일한 데이터 컨텍스트를 사용해야합니다. 예를 들어:

    public static void UpdateUser(UserLibrary.User user) {
        using (UserLibraryDataContext dc = new UserLibraryDataContext(_conStr))
        {
            UserLibrary.User newUser = (from user2 in dc.Users where user2.UserID == user.UserID select user2).FirstOrDefault();
            newUser.Email = user.Email;
            newUser.FirstName = user.FirstName;
            newUser.LastName = user.LastName;
            dc.SubmitChanges();
        }        

DataconText.ObjectTrackingEnabled = false를 설정하지 않는 한 다른 DataContext에서 생성 된 사용자를 간단히 전달할 수 없으며 업데이트가 작동하지 않을 수 있습니다. 대신, 동일한 DataContext 내에서 기존 객체를 검색하고 값을 업데이트 한 다음 변경 사항을 제출해야합니다. 같은 작업을 동일한 DataContext 내에서 유지하십시오.

그러나 L2S를 추천합니다. 일단 위의 몇 가지 끔찍한 문제를 극복하면 훌륭한 기술이며 확실히 시간 절약입니다. 그러나 DAL 주위에 얇은 래퍼를 사용하는 것이 좋습니다. 따라서 쉽게 변경할 수 있습니다. 내 코드의 일부를 내 데이터 액세스의 일부에 OpenAccess orm-> MySQL로 사용하도록 (경제적 인 이유로) 포팅하는 것을 고려하고 있으며, 제대로 정의 된 계층이 있으시면이 작업은 몇 시간 만 필요합니다.

나는 Echostorm에 동의합니다. L2S는 귀하의 요구에 적합합니다. 그리고 함께 일하는 것은 매우 쉽습니다 ...

앱을 올바르게 디자인하고 데이터 액세스 계층을 잘 분리하는 경우 L2S로 이동해야합니다. 내가 당신의 게시물에서 추론 한 바에 따르면, 그것은 큰 프로젝트가 아니므로 L2S는 당신의 요구 사항을 잘 충족시켜야하는 반면, 평범한 오래된 ado.net은 단지 아니오이고 엔티티 프레임 워크입니다 ... 그냥 사용하지 마십시오. , 좋아요? 어쨌든, 당신이 당신의 dal을 잘 분리한다면, 프로젝트가 성장하면 미래에 L2를 다른 것으로 바꿀 수 있습니다. 그리고 L2가 아무데도 가지 않더라도 아무데도 가지 않습니다. MS는 투자를 중단했지만 더 이상 사용되지 않거나 무언가가되지 않으므로 여전히 안전한 투자입니다. 또는 간단하고 성숙한 nhibernate를 평가해야합니다.

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