2008-11-09 14 views
25

Với LINQ to SQL nhiều khả năng sẽ không nhận được nhiều phát triển tích cực như Entity Framework bạn có nghĩ tốt nhất là chuyển sang Entity Framework không?Bạn có nghĩ thuận tiện khi chuyển sang Khung thực thể không?

Cá nhân tôi thấy EF rất khó sử dụng và khó sử dụng so với LINQ to SQL, điều này rất tự nhiên.

EDIT: Gần đây tôi đã đăng một bài viết trên blog của tôi về cảm xúc của tôi đối với quyết định tiềm năng này ...

ADO.NET v LINQ to SQL

Trả lời

22

IMO, không vào lúc này.

Rõ ràng (từ recent announcements đặc biệt) mà EF có trong một số sửa đổi nặng khi kịch bản "thunderdome" diễn ra giữa LINQ-to-SQL và EF. Bất kể điều gì xảy ra, EF (trong một vài năm) gần như chắc chắn sẽ hoàn toàn khác với EF ngày nay. Hoặc chắc chắn "đủ khác biệt" ;-p

Như vậy, quan điểm của tôi là: gắn bó đơn giản. Và đơn giản là LINQ-to-SQL.

Tôi không thấy nhiều lợi ích khi học một hệ thống nổi tiếng phức tạp nếu tôi biết nó sẽ thay đổi rất sớm.

Và tôi chắc chắn 100% với bạn về LINQ-to-SQL ;-p

Nếu tôi cần một cái gì đó hơn LINQ-to-SQL ngay bây giờ, tôi muốn nhìn vào NHibernate hoặc có thể LLBLGen Pro.

(chỉnh sửa - như một bản cập nhật, vị trí của tôi đã dịu lại một chút, herehere - nhưng tôi vẫn đang sử dụng LINQ-to-SQL là công cụ chính của tôi; cũng - LINQ-to-SQL isn't quite dead yet; -p).

+1

Ngay trên !!! Tôi yêu L2S, và tôi bán ghét EF :) (vì lý do thực tế, cụ thể). –

+0

@ Timothy - vâng, có nhiều lý do. Những người như Ian Cooper có thể nói chuyện * cả ngày * về họ ;-p (tốt chap, biết công cụ ORM của mình) –

+0

Đồng ý, ngay trên! Khi EF vNext và .net 4.0 xuất hiện, nó sẽ đáng để xem xét lại. Cho đến lúc đó, L2S ... – KristoferA

1

Khá nhiều nhà phát triển có kinh nghiệm đã đưa ra "ADO .NET Entity Framework Vote of No Confidence" như được thảo luận thêm here.

Tôi nghĩ rằng chúng tôi hy vọng nó sẽ được cải thiện đáng kể trong nhóm 01O33.Netbởi nhóm ADO.Net.

Và đây là một số video từ PDC gần đây.

2

Đối với hồ sơ, một số do dự về tương lai của LINQ to SQL đã được bày tỏ ở đây:

Is LINQ to SQL DOA?

Has Microsoft really killed LINQ to SQL?

+0

Nhưng điểm mấu chốt của tôi là: trong khi có quá nhiều thông lượng, việc đầu tư rất nhiều là một sai lầm. LINQ-to-SQL yêu cầu đầu tư rất ít, vì vậy tôi không thấy rằng có nhiều rủi ro. –

+0

Tôi đồng ý hoàn toàn, Marc. Tôi chỉ chỉ ra cho những người có thể không nhận thức được (như tôi đã không cho đến khi tôi đọc về nó gần đây trên SO) mà LINQ to SQL không phải là không có một số rủi ro. Nguy cơ thấp, và chắc chắn lợi ích ngắn hạn cao, chắc chắn. Bạn có thể nói bằng khối lượng của SO câu hỏi mà nó rất phổ biến – DOK

+0

Thật vậy. Gotta thích chiến lược: giết thực hiện mà mọi người thực sự thích ;-p Trong sự công bằng, nó phức tạp hơn rất nhiều, và tôi mong đợi câu trả lời "thực" trong vài năm (.NET 4.0). MS có một chút của một PR/dev-núi tự tin để leo lên ở đây. Tôi hy vọng họ thành công ... –

3

tôi phải đồng ý với Marc Gravell. Có lẽ khi phiên bản tiếp theo của Entity Framework được phát hành (.net 4.0/VS2010) sẽ có lợi thế khi sử dụng EF, và sau đó nó có lẽ sẽ rất khác so với phiên bản hiện tại của EF.

Cho đến lúc đó ít nhất tôi sẽ tránh EF như bệnh dịch hạch cho bất cứ điều gì ngoài kiểm tra/mã thử nghiệm sẽ không bao giờ đạt sản lượng.

EF msdn forum có đầy đủ các ví dụ về lý do EF chưa sẵn sàng cho thời gian chính, nhưng tôi có one particular example là người chiến thắng rõ ràng - thường là truy vấn 5 bảng đơn giản (10-15 dòng SQL) trở thành >1500 lines of SQL khi sử dụng EF và kiểm soát EntityDataSource:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3874607&SiteID=1

http://paste-it.net/public/q6ed5c2/

và như cho tương lai của EF - với Microsoft history of changing direction vào những thứ chiến lược lớn qua đêm, ai biết được hiện tại của họ "s mục tiêu chiến lược "với EF sẽ trở thành sự thật một vài năm kể từ bây giờ ..? Tôi chắc chắn sẽ không đặt cược vào nó. Xem:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=4100399&SiteID=1#4107623

+0

Đó là truy vấn 1.500 dòng là vô lý tôi không thể tin rằng. –

+0

Yup, những loại truy vấn quái vật đó ... đáng ngạc nhiên. Đây là một ví dụ thú vị khác; truy vấn đơn giản với nhóm + tổng hợp trên hai bảng. L2S tạo ra một truy vấn hiệu quả, L2E thì không. http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb72fae4-0709-48f2-8f85-31d0b6a85f68 – KristoferA

2

LINQ to SQL dường như không là một lựa chọn, trừ khi bạn sử dụng SQL Server (hoặc SQL Server nhỏ gọn), vì vậy đó là lý do đủ cho tôi để tránh nó và sử dụng EF (Tôi muốn để sử dụng PostgreSQL).

Chắc chắn có đủ thứ bị thiếu trong phiên bản 1 của EF khiến tôi ngại ngần giới thiệu nó. Có vẻ như phiên bản 2 của EF (khi được phát hành) sẽ là phiên bản đầu tiên có thể được đề xuất nghiêm túc để chuyển sang.

+0

Điểm bật - l2s CHỈ là Máy chủ SQL. EF = các nhà cung cấp khác –

6

Nếu bạn đang phát triển dựa trên cơ sở dữ liệu, EF có lợi thế thực sự hiện nay.

Tôi đã sử dụng cả LINQ to SQL và EF và đã làm việc qua rất nhiều sự thất vọng nhỏ của EF v1.

Tuy nhiên, một điều khiến EF v1 giành chiến thắng cho tôi là bản cập nhật đáng kinh ngạc tốt từ trình hướng dẫn cơ sở dữ liệu. Thật đáng kinh ngạc, điều này thực sự hoạt động ! Nó có vẻ hơi tầm thường, nhưng nếu bạn đang làm thiết kế cơ sở dữ liệu đầu tiên, bạn muốn dựa vào các công cụ để tạo các lớp cho bạn và bạn không muốn phải tạo lại toàn bộ mô hình của mình chỉ để thực hiện thay đổi.

Điều này một mình làm cho EF v1 sự lựa chọn của tôi. Tôi đề nghị bỏ qua các tính năng tiên tiến của EF v1 - nó không có nơi nào gần với khả năng sử dụng mà là nền tảng đầy tham vọng mà nó hướng đến.

Đem lại sự hóm hỉnh của EF v1 và bạn sẽ ở vị trí tốt nhất trong tương lai.

Pete.

+4

Cập nhật 'tốt' 'từ trình hướng dẫn cơ sở dữ liệu' ?? Một trong đó sẽ không phát hiện nếu bạn thay đổi nullability, kiểu dữ liệu vv trên các cột hiện có? Một thay thế toàn bộ phần SSDL của EDMX khi một cái gì đó được cập nhật, ghi đè bất kỳ tùy chỉnh nào bạn có thể đã thực hiện cho nó? – KristoferA

+3

(tiếp theo) Người không thể thêm lại pháp nhân đã bị xóa nếu bạn không sử dụng trình chỉnh sửa xml để xóa các tạo phẩm SSDL theo cách thủ công? Oh well, họ nói nó sẽ tốt hơn trong Visual Studio 2010. Trong khi tôi đang gắn bó với L2S và cập nhật mô hình của tôi bằng cách sử dụng công cụ đồng bộ của tôi cho các mô hình L2S chỉ áp dụng thay đổi * *. – KristoferA

7

Tôi đã hoàn thành một vài dự án MVC hiện đang được sản xuất với L2SQL dưới mui xe và thấy nó là một niềm vui để sử dụng. Bây giờ tôi đang bắt tay vào một dự án mới và quyết định viết nó bằng cách sử dụng EF và L2EF cho các bài báo được trích dẫn trước đây công bố cái chết của L2SQL. Chỉ sau một vài ngày tôi đã quyết định quay trở lại L2SQL. Những điều đơn giản như phải thiết lập các phím nước ngoài cho chèn bằng cách sử dụng một trong hai cú pháp khủng khiếp được hiển thị dưới đây hoặc tra cứu không cần thiết đã gây sốc cho tôi.

foo.Foreign_TypeReference.EntityKey = 
    new EntityKey("DataContextName.Foreign_Type", "Foreign_Type_Id", ForeignTypeId); 

Thay vì:

foo.Foreign_Type_Id = ForeignTypeId; 

Tôi không nghĩ rằng nó sẽ là khó cổng L2SQL lên một phiên bản tương lai của EF như L2SQL có một tập hợp con của các chức năng (mặc dù thực hiện tốt hơn). Một vài điều mà L2SQL có mà L2EF không, ví dụ Single() và SingleOrDefault(), có thể được di chuyển sang EF bằng cách tạo ra một vài phương thức mở rộng. Tôi nghĩ rằng sẽ mất ít thời gian hơn để hệ thống chạy bằng L2SQL và sau đó chuyển nó về sau khi EF không có mùi.

+0

Đó là số tiền khá nhiều nó cho tôi. Tôi hy vọng EF vNext sẽ đẹp hơn. –

-1

Gần đây, tôi phải nghiên cứu dự án ORM nào nên sử dụng. Lúc đầu - đã thử L2S. Nó không phải là xấu cả, nhưng nó đã lỗi thời (MS sẽ không hỗ trợ nó nữa), đó là lý do tại sao tôi bắt đầu kiểm tra L2E. Tôi tốt với mã được tạo ra, nhưng tạo ra các khung nhìn giả, thực thể và ánh xạ giữa chúng chỉ để làm cho các thủ tục lưu trữ sẵn có không phải để điền vào tất cả các trường của thực thể là một overkill cho tôi. Và tôi muốn tách lớp dữ liệu của tôi, vì vậy - tôi đã phải lập bản đồ dữ liệu từ các đối tượng được tạo ra cho các đối tượng tôi tạo ra.

Tôi mất vài giờ thử nghiệm với NHibernate + Fluent NHibernate + LINQ thành NHibernate
để kết hợp với sự kết hợp này.

+2

Điều này không đúng. Microsoft hiện có 5 dev trên LINQ to SQL. –

+0

aha ... Hôm qua đọc rằng họ đang sửa lỗi. Lỗi của tôi. Dù sao - điều đó không thay đổi quan điểm của tôi. –

+0

.NET 4.0 sẽ có một loạt cải tiến đối với LINQ To SQL http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40 –

Các vấn đề liên quan