Khung thực thể vs LINQ to SQL


828

Bây giờ .NET v3.5 SP1 đã được phát hành (cùng với VS2008 SP1), giờ đây chúng tôi có quyền truy cập vào khung thực thể .NET.

Câu hỏi của tôi là này. Khi cố gắng quyết định giữa việc sử dụng Entity Framework và LINQ to SQL làm ORM, sự khác biệt là gì?

Theo cách hiểu của tôi, Khung thực thể (khi được sử dụng với LINQ to Entity) có phải là 'người anh lớn' đối với LINQ to SQL không? Nếu đây là trường hợp - nó có lợi thế gì? Nó có thể làm gì mà LINQ to SQL không thể tự làm được?


138
Tôi nghĩ rằng các câu trả lời dưới đây nên được kiểm tra lại vì thời gian dài kể từ khi EF được phát hành, vì vậy các nhà phát triển mới đến đây có thể có ấn tượng sai. EF trở thành một công cụ TUYỆT VỜI và DỄ DÀNG kể từ khi phát hành sớm. Bạn chỉ cần thiết lập kết nối với DB và đó là loại 90% tất cả những gì bạn cần. Phát triển rất nhanh, từ quan điểm kinh nghiệm! Từ đó - LINQ là người bạn tốt nhất của bạn. Nó có khả năng tùy biến cao, MVC chỉ thích nó và với những người nói rằng nó tệ - Tìm hiểu cách sử dụng nó trước tiên (và cũng nắm giữ LINQ)!
graumanoz

10
Thật rõ ràng - bây giờ không giống như bạn có sự lựa chọn - MSFT đã giết chết LINQ2Query một cách hiệu quả để ủng hộ EF. Tuy nhiên, thực tế là MSFT có nguồn mở EF đã giúp nó hút ít hơn và chắc chắn sẽ trở nên tốt hơn. Nhưng đối với bất kỳ ai tham gia vào EF - hãy chắc chắn hiểu rằng vẫn còn rất nhiều điều kỳ quặc trong EF. Tôi đã đăng về một - stackoverflow.com/questions/305092/ Cách
nikib3ro

4
@ kape123, (a) LINQ to SQL không "chết"; nó vẫn có thể sử dụng được; (b) LINQ to SQL là phương thức truy cập dữ liệu tiêu chuẩn trong phát triển Windows Phone 8.
Ryan Lundy

9
@ user3308043, [cần dẫn nguồn].
Ryan Lundy

3
@Kyralessa - Kể từ năm 2010 (với việc phát hành .NET4.0, trích dẫn gần đây nhất tôi có thể tìm thấy), MS thừa nhận rằng , trong khi một số khoản đầu tư có thể được thực hiện trong LINQ2Query, "phần lớn khoản đầu tư tổng thể của chúng tôi sẽ vào Thực thể Khung. "
kmote

Câu trả lời:


483

LINQ to SQL chỉ hỗ trợ ánh xạ 1 đến 1 bảng cơ sở dữ liệu, khung nhìn, sprocs và các chức năng có sẵn trong Microsoft SQL Server. Đây là một API tuyệt vời để sử dụng để xây dựng truy cập dữ liệu nhanh đến cơ sở dữ liệu SQL Server được thiết kế tương đối tốt. LINQ2Query được phát hành lần đầu tiên với C # 3.0 và .Net Framework 3.5.

LINQ to Entities (ADO.Net Entity Framework) là API ORM (Object Relative Mapper) cho phép định nghĩa rộng các mô hình miền đối tượng và mối quan hệ của chúng với nhiều nhà cung cấp dữ liệu ADO.Net khác nhau. Như vậy, bạn có thể trộn và kết hợp một số nhà cung cấp cơ sở dữ liệu, máy chủ ứng dụng hoặc giao thức khác nhau để thiết kế kết hợp các đối tượng được xây dựng từ nhiều bảng, nguồn, dịch vụ, v.v. ADO.Net Framework được phát hành cùng với .Net Framework 3.5 SP1.

Đây là một bài viết giới thiệu hay về MSDN: Giới thiệu LINQ với dữ liệu quan hệ


có vẻ như bạn sử dụng LINQ to SQL để truy vấn trong EF
positiveGuy

11
@CoffeeAddict trong khi chúng có phong cách rất giống nhau khi sử dụng LINQ lambdas, mỗi API có nền tảng hoàn toàn khác nhau. Chẳng hạn, cách LINQ2Query tạo các truy vấn SQL cho phép sử dụng các hàm SQL, trong khi L2E thì không, hoặc ít nhất là không như năm 2008
Kris

2
Phương pháp tiếp cận hướng đối tượng của EF làm cho nó thực sự dễ dàng và thuận tiện để sử dụng, có thể được mã hóa rất nhanh, được quản lý. Đối với tôi, chỉ là cách tốt nhất để tích lũy dữ liệu.
Antoine Pelletier

10
Câu trả lời này đã lỗi thời. Bây giờ Linq to SQL hỗ trợ ánh xạ one2many
George Lanetz

201

Tôi nghĩ rằng câu trả lời nhanh và bẩn là

  • LINQ to SQL là cách nhanh chóng và dễ dàng để làm điều đó. Điều này có nghĩa là bạn sẽ đi nhanh hơn và giao hàng nhanh hơn nếu bạn đang làm việc trên một cái gì đó nhỏ hơn.
  • Entity Framework là cách hoàn toàn không có mục đích để thực hiện. Điều này có nghĩa là bạn sẽ mất nhiều thời gian hơn về phía trước, phát triển chậm hơn và linh hoạt hơn nếu bạn đang làm việc trên một cái gì đó lớn hơn.

32
Bạn cũng có xu hướng viết ít dòng mã hơn với L2S để thực hiện điều tương tự như với EF. Không tải lười biếng trong EF có nghĩa là bạn luôn kiểm tra xem có thứ gì đã được tải hay không.
Paul Mendoza

Brad, bạn muốn đề xuất gì cho một trang web thương mại điện tử? Ý tôi là tôi không thể thấy bất cứ điều gì khác ngoài CRUD đơn giản đang diễn ra ở đó ...
positiveGuy

2
@CoffeeAddict rõ ràng, top 3 câu trả lời được bình chọn nhiều nhất nói L2S cho CRUD đơn giản
IsmailS

11
@Banford Với EF trong .NET 4.0 Tôi nghĩ rằng nó tốt hơn L2S. Các tính năng bị thiếu từ EF trong 3.5 mà L2S đã được thêm vào EF trong .NET 4.0. Các câu lệnh LINQ của bạn bây giờ trong EF trong .NET 4.0 sẽ trông khá giống với các câu lệnh trong L2S. EF giúp bạn có thêm một số điều bạn có thể làm ngay bây giờ so với những gì L2S cung cấp.
Paul Mendoza

40
Câu trả lời này hiện đã 5 tuổi và khá lỗi thời. Entity Framework 6 hiện đang ở bản Beta và được cải thiện rất nhiều, bao gồm tải Lazy, hỗ trợ enum, v.v.
Tim

109

LINQ to SQL có thật sự đã chết? của Jonathan Allen cho InfoQ.com

Matt Warren mô tả [LINQ to SQL] là một thứ "thậm chí không bao giờ tồn tại." Về cơ bản, nó chỉ được coi là độc lập để giúp họ phát triển LINQ cho đến khi ORM thực sự sẵn sàng.

...

Quy mô của Entity Framework khiến nó bỏ lỡ thời hạn .NET 3.5 / Visual Studio 2008. Nó đã được hoàn thành đúng lúc vì không may có tên ".NET 3.5 Service Pack 1", giống như một bản phát hành chính hơn là gói dịch vụ.

...

Các nhà phát triển không thích [Khung thực thể ADO.NET] vì tính phức tạp.

...

kể từ .NET 4.0, LINQ to Entities sẽ là giải pháp truy cập dữ liệu được đề xuất cho LINQ cho các tình huống quan hệ.


56
Trên thực tế, chúng tôi không thích EF vì nó có một nhà thiết kế nghèo nàn và vô cùng lỗi lầm. Tôi chưa bao giờ thấy nó phức tạp đến thế.
BlueRaja - Daniel Pflughoeft

12
Rất nhiều trang web thương mại điện tử lớn sử dụng LINQ to SQL. Ví dụ: Redbox, Stackoverflow, v.v.
positiveGuy

14
Tôi biết RẤT NHIỀU nhà phát triển giỏi sử dụng LINQ to SQL và nói rằng những bài viết này hoàn toàn bị thổi phồng. Tôi đồng ý. LINQ to SQL đã được sử dụng trong các .com mạnh mẽ và vẫn còn.
positiveGuy

4
Đúng, gọi .ToString () trên thuộc tính số nguyên trong truy vấn L2EF không nên gây ra ngoại lệ.
StingyJack

3
@ BlueRaja-DannyPflughoeft Có còn đúng sau hơn 5 năm không?
Vikas Rana

94

Có một số khác biệt rõ ràng được nêu trong bài viết mà @lars đã đăng, nhưng câu trả lời ngắn gọn là:

  • L2S được liên kết chặt chẽ - thuộc tính đối tượng với trường cơ sở dữ liệu cụ thể hoặc ánh xạ đối tượng chính xác hơn vào một lược đồ cơ sở dữ liệu cụ thể
  • L2S sẽ chỉ hoạt động với SQL Server (theo như tôi biết)
  • EF cho phép ánh xạ một lớp đơn thành nhiều bảng
  • EF sẽ xử lý các mối quan hệ MM
  • EF sẽ có khả năng nhắm mục tiêu bất kỳ nhà cung cấp dữ liệu ADO.NET nào

Tiền đề ban đầu là L2S dành cho Phát triển nhanh và EF cho các ứng dụng cấp n "enterprisey" hơn, nhưng đó là bán L2S một chút.


13
Trích dẫn của bạn "L2S sẽ chỉ hoạt động với SQL Server (theo như tôi biết)" cần cập nhật: dự án nguồn mở "dblinq" thay thế lắp ráp LINQ to SQL bằng một phiên bản có thể nói chuyện với MySQL, PostgreQuery, Ingres, Firebird, SQLite. .. và Microsoft SQL (tất nhiên).
Contango

1
chờ đã ... vậy EF không tạo ra các đối tượng DL kết hợp chặt chẽ?
positiveGuy

7
phải là tiền đề ban đầu rằng L2S ​​không phải là một giải pháp có khả năng của doanh nghiệp không còn đúng nữa. Ý tôi là StackOverflow chạy trên L2S và một loạt các tên miền khác như Redbox và nhiều thứ khác.
positiveGuy

74

LINQ to SQL

  1. Nguồn dữ liệu đồng nhất: SQL Server
  2. Đề xuất cho các dự án nhỏ chỉ khi cấu trúc dữ liệu được thiết kế tốt
  3. Ánh xạ có thể được thay đổi mà không cần biên dịch lại với SqlMetal.exe
  4. .dbml (Ngôn ngữ đánh dấu cơ sở dữ liệu)
  5. Ánh xạ một-một giữa các bảng và các lớp
  6. Hỗ trợ kế thừa TPH
  7. Không hỗ trợ các loại phức tạp
  8. Phương pháp lưu trữ đầu tiên
  9. Cơ sở dữ liệu tập trung vào cơ sở dữ liệu
  10. Được tạo bởi nhóm C #
  11. Được hỗ trợ nhưng không cải thiện thêm dự định

Khuôn khổ thực

  1. Nguồn dữ liệu không đồng nhất: Hỗ trợ nhiều nhà cung cấp dữ liệu
  2. Đề xuất cho tất cả các dự án mới ngoại trừ:
    • những cái nhỏ (LINQ to SQL)
    • khi nguồn dữ liệu là một tệp phẳng (ADO.NET)
  3. Ánh xạ có thể được thay đổi mà không cần biên dịch lại khi cài đặt mô hình và ánh xạ tệp Siêu dữ liệu Quy trình nhân tạo để sao chép vào thư mục đầu ra
  4. .edmx (Mô hình dữ liệu thực thể) có chứa:
    • SSDL (Ngôn ngữ định nghĩa lược đồ lưu trữ)
    • Cơ sở dữ liệu (Ngôn ngữ định nghĩa lược đồ khái niệm)
    • MSL (Ngôn ngữ đặc tả bản đồ)
  5. Ánh xạ một-một, một-nhiều, nhiều-một giữa các bảng và các lớp
  6. Hỗ trợ kế thừa:
    • TPH (Bảng theo phân cấp)
    • TPT (Bảng mỗi loại)
    • TPC (Bảng trên mỗi lớp bê tông)
  7. Hỗ trợ các loại phức tạp
  8. Cách tiếp cận mã đầu tiên, mô hình đầu tiên, lưu trữ đầu tiên
  9. Giao diện trung tâm ứng dụng của cơ sở dữ liệu
  10. Được tạo bởi nhóm SQL Server
  11. Tương lai của API dữ liệu Microsoft

Xem thêm:


6
Đây là câu trả lời hiện tại và chi tiết nhất.
ErTR

2
Không phải Entity Framework sử dụng LINQ to SQL khi bạn đang viết dbSet<Orders>.Where()...ToList()? Tôi nghĩ thật sai lầm khi có Entity Framework trái ngược với LINQ sang SQL.
Don Cheadle

4
@mmcrae EF không sử dụng L2S, cả hai đều là nhà cung cấp linq cho cơ sở dữ liệu cơ bản. Nếu bạn hiểu nó là Linq-to-a-cơ sở dữ liệu, tương tự như linq-to-object và linq-to-xml, thì có, cả hai đều tương tự trong cơ sở dữ liệu linq-to-a-a. Nhưng không, EF không sử dụng L2S ​​(hoặc ngược lại). Hai công cụ hoàn toàn tách biệt.
Maarten

4
"Đề xuất cho tất cả các dự án mới ngoại trừ ... những dự án nhỏ" Tôi không đồng ý. Code First là một cách cực kỳ nhanh chóng để bắt đầu với các dự án nhỏ. Ngoài ra, cập nhật tuyệt vời cho câu hỏi này.
DrewJordan

51

Trải nghiệm của tôi với Entity Framework ít hơn sao. Đầu tiên, bạn phải kế thừa từ các lớp cơ sở của EF, vì vậy hãy nói lời tạm biệt với POCOs. Thiết kế của bạn sẽ phải ở xung quanh EF. Với LinqtoQuery tôi có thể sử dụng các đối tượng kinh doanh hiện có của mình. Ngoài ra, không có tải lười biếng, bạn phải tự thực hiện điều đó. Có một số công việc xung quanh để sử dụng POCO và lười tải, nhưng chúng tồn tại IMHO vì EF chưa sẵn sàng. Tôi dự định sẽ quay lại với nó sau 4.0


7
Thiếu hỗ trợ POCO là lý do số một tôi đã chọn LINQ to SQL qua Entity Framework. Tôi có thể xem lại EF khi họ kết hợp nó trong phiên bản tiếp theo, như họ đang hứa. Có một số dự án bổ sung ngoài đó làm POCO cho EF, nhưng không đủ sạch.
Joseph Ferris

27
Trong trường hợp ai đó (như tôi) không biết POCO là viết tắt của từ gì: Object Old CLR Object
CBono

4
Tôi thực sự không thấy những gì ồn ào về việc không hỗ trợ POCO là ... đó là một cấp độ trừu tượng hơn. Tạo một nhà máy, tiêm kho lưu trữ dữ liệu và xây dựng POCO của bạn ở đó. Có lẽ đó là một ý tưởng tốt.
EightyOne Đoàn kết

3
Tôi nghe thấy POCO có thể có trong EF 4
positiveGuy

8
Ngày nay, hỗ trợ POCO có sẵn và việc thừa kế không còn là yêu cầu đối với các lớp thực thể @CoffeeAddict POCO chỉ là một đối tượng đơn giản không phụ thuộc vào một khung cụ thể và là một phần chính của các mẫu khung thực thể hiện đại
Chris McGrath

46

Tôi tìm thấy một câu trả lời rất hay ở đây giải thích khi nào nên sử dụng những gì trong những từ đơn giản:

Nguyên tắc cơ bản cho việc sử dụng khung nào là cách lập kế hoạch chỉnh sửa dữ liệu của bạn trong lớp trình bày.

  • Linq-To-Sql - sử dụng khung này nếu bạn có kế hoạch chỉnh sửa mối quan hệ một-một của dữ liệu trong lớp trình bày của bạn. Có nghĩa là bạn không có kế hoạch kết hợp dữ liệu từ nhiều hơn một bảng trong bất kỳ một chế độ xem hoặc trang nào.

  • Entity Framework - sử dụng khung này nếu bạn có kế hoạch kết hợp dữ liệu từ nhiều hơn một bảng trong chế độ xem hoặc trang của bạn. Để làm cho điều này rõ ràng hơn, các điều khoản trên dành riêng cho dữ liệu sẽ được thao tác trong chế độ xem hoặc trang của bạn, không chỉ hiển thị. Điều này là quan trọng để hiểu.

Với Khung thực thể, bạn có thể "hợp nhất" dữ liệu được gắn thẻ với nhau để trình bày cho lớp trình bày ở dạng có thể chỉnh sửa và sau đó khi biểu mẫu đó được gửi, EF sẽ biết cách cập nhật TẤT CẢ dữ liệu từ các bảng khác nhau.

Có lẽ có nhiều lý do chính xác hơn để chọn EF trên L2S, nhưng đây có lẽ là lý do dễ hiểu nhất. L2S không có khả năng hợp nhất dữ liệu để xem bản trình bày.


36

Ấn tượng của tôi là cơ sở dữ liệu của bạn khá tuyệt vời hoặc được thiết kế rất tệ nếu Linq2Sql không phù hợp với nhu cầu của bạn. Tôi có khoảng 10 trang web cả lớn hơn và nhỏ hơn đều sử dụng Linq2Sql. Tôi đã xem xét và khung Entity nhiều lần nhưng tôi không thể tìm thấy lý do chính đáng để sử dụng nó trên Linq2Sql. Điều đó nói rằng tôi cố gắng sử dụng cơ sở dữ liệu của mình làm mô hình để tôi đã có ánh xạ 1 đến 1 giữa mô hình và cơ sở dữ liệu.

Ở công việc hiện tại của tôi, chúng tôi có một cơ sở dữ liệu với hơn 200 bảng. Một cơ sở dữ liệu cũ với nhiều giải pháp tồi nên tôi có thể thấy lợi ích của Entity Framework so với Linq2Sql nhưng tôi vẫn thích thiết kế lại cơ sở dữ liệu vì cơ sở dữ liệu là công cụ của ứng dụng và nếu cơ sở dữ liệu được thiết kế kém và chậm thì ứng dụng của tôi cũng sẽ chậm Sử dụng khung Entity trên cơ sở dữ liệu như vậy có vẻ như là một quickfix để ngụy trang mô hình xấu nhưng nó không bao giờ có thể ngụy trang hiệu năng xấu mà bạn có được từ cơ sở dữ liệu đó.


1
Bạn thiếu điểm - ngay cả với các cơ sở dữ liệu nhỏ, bạn có thể muốn một cái gì đó khác với mối quan hệ 1: 1 giữa các bảng cơ sở dữ liệu và các đối tượng mã / miền. Chỉ phụ thuộc vào mức độ trừu tượng mà bạn muốn trong các đối tượng bus / domain.
thuật giả kim

18
Tôi đã nhận ra rằng :) Hôm nay tôi thích mã hóa các thực thể kinh doanh của mình. Tôi vẫn sử dụng Linq2sql nhưng chỉ trong kho của tôi nơi tôi nhận dữ liệu bằng Linq2sql và chuyển đổi các thực thể linq2sql thành các thực thể kinh doanh tùy chỉnh của tôi. Có thể làm việc nhiều hơn một chút so với sử dụng trình vẽ bản đồ hoặc tôi vẫn muốn giữ cho lớp doanh nghiệp của mình không có bất kỳ mã cụ thể OR-mapper nào.
terjetyl

25

2
Một số điều trong câu trả lời là không chính xác. Không yêu cầu EDMX nếu bạn sử dụng Code First. Và tôi không hiểu làm thế nào DI phát huy tác dụng khi bạn đang sử dụng Code First.
Maarten

1
Ngoài ra, Linq to SQL có thể tạo ra một DB từ các lớp mô hình tốt. Không chắc chắn nếu nó cũng có thể tự tạo DB, nhưng việc tạo lược đồ và các bảng nằm trong khả năng của Linq với SQL.
Tom Lint

Cảm ơn câu trả lời, tôi nghĩ rằng người ta có thể sử dụng sqlmetal.exe docs.microsoft.com/en-us/dotnet/framework/tools/ trộm để tạo mã / ánh xạ từ cơ sở dữ liệu khi sử dụngLinq to SQL
Vinod Srivastav

23

Các câu trả lời ở đây đã đề cập đến nhiều điểm khác biệt giữa Linq2Sql và EF, nhưng có một điểm quan trọng chưa được chú ý nhiều: Linq2Sql chỉ hỗ trợ SQL Server trong khi EF có nhà cung cấp cho RDBMS sau:

Được cung cấp bởi Microsoft:

  • Trình điều khiển ADO.NET cho SQL Server, OBDC và OLE DB

Thông qua các nhà cung cấp bên thứ ba:

  • MySQL
  • Oracle
  • DB2
  • VistaDB
  • SQLite
  • PostgreSQL
  • Thông tin
  • U2
  • Sybase
  • Synergex
  • Chim lửa
  • Npgs

đến tên một vài.

Điều này làm cho EF trở thành một sự trừu tượng hóa lập trình mạnh mẽ đối với kho dữ liệu quan hệ của bạn, có nghĩa là các nhà phát triển có một mô hình lập trình nhất quán để làm việc với bất kể kho lưu trữ dữ liệu cơ bản. Điều này có thể rất hữu ích trong các tình huống bạn đang phát triển một sản phẩm mà bạn muốn đảm bảo sẽ tương tác với một loạt các RDBMS phổ biến.

Một tình huống khác mà sự trừu tượng đó hữu ích là bạn là thành viên của nhóm phát triển làm việc với một số khách hàng khác nhau hoặc các đơn vị kinh doanh khác nhau trong một tổ chức và bạn muốn cải thiện năng suất của nhà phát triển bằng cách giảm số lượng RDBMS mà họ phải trở thành quen thuộc để hỗ trợ một loạt các ứng dụng khác nhau trên các RDBMS khác nhau.


15

Tôi thấy rằng tôi không thể sử dụng nhiều cơ sở dữ liệu trong cùng một mô hình cơ sở dữ liệu khi sử dụng EF. Nhưng trong linq2sql tôi chỉ có thể bằng tiền tố tên lược đồ với tên cơ sở dữ liệu.

Đây là một trong những lý do ban đầu tôi bắt đầu làm việc với linq2sql. Tôi không biết nếu EF đã cho phép chức năng này, nhưng tôi nhớ đọc rằng nó được dành cho nó không cho phép điều này.


12

Nếu cơ sở dữ liệu của bạn đơn giản và đơn giản, LINQ to SQL sẽ làm. Nếu bạn cần các thực thể logic / trừu tượng trên đầu các bảng của mình, thì hãy truy cập Entity Framework.


4
Entity Framework cho phép một lớp trừu tượng trên cùng của cơ sở dữ liệu. Vấn đề với nhiều OR Mappers ngày nay (theo tôi) là họ cung cấp ánh xạ 1 đến 1 giữa các bảng và các lớp. Mô hình cơ sở dữ liệu không phải lúc nào cũng phản ánh cách chúng ta nghĩ về nó theo mô hình kinh doanh.
senfo

Chạy ra khỏi không gian. Dù sao đi nữa, dựa trên những gì tôi đã nói ở trên, tôi cho rằng câu trả lời của bạn chưa hoàn chỉnh.
senfo

7
Tôi nghĩ rằng đây là lời khuyên thực sự xấu. L2S là tốt bất kể sự đơn giản hay phức tạp của cơ sở dữ liệu của bạn. Cái bẫy thực sự là không có một sự tách biệt thích hợp. Nếu bạn cố gắng hợp nhất lớp doanh nghiệp và lớp truy cập dữ liệu của mình và sử dụng các đối tượng Linqed up cho mọi thứ, thì bạn sẽ thấy giới hạn L2S. Nhưng đó là một vấn đề với một thiết kế quá đơn giản và nguyên khối. L2S tạo ra một DAL tuyệt vời và nếu bạn xem xét truy vấn và kiên trì một mối quan tâm riêng biệt với các quy tắc kinh doanh của mình, bạn sẽ tự cứu mình rất nhiều rắc rối trong nhiều lĩnh vực trong thời gian dài.
mattmc3

1
điều này không nói gì với tôi Điều gì là đơn giản trong các điều khoản của bạn?
positiveGuy

1
và ý nghĩa của bạn là một ví dụ cho nhu cầu "logic / trừu tượng hóa". Vâng, tôi biết trừu tượng là gì nhưng một ví dụ trong ngữ cảnh của bạn xin vui lòng ... để giải thích cho tôi chính xác những gì bạn đang nói ... mô tả nó, đừng chỉ nói cho tôi tiếng lóng chung ... tất cả đều liên quan đến người nói những từ đó vì vậy tôi không biết bạn muốn nói gì
positiveGuy

8

Chưa hỗ trợ các kiểu dữ liệu SQL 2008 duy nhất. Sự khác biệt từ quan điểm của tôi là Entity vẫn có cơ hội xây dựng một mô hình xung quanh kiểu dữ liệu địa lý của tôi trong một số bản phát hành trong tương lai và Linq to SQL, bị bỏ rơi, sẽ không bao giờ.

Tự hỏi có chuyện gì với nHibernate hay OpenAccess ...


3
Các kiểu dữ liệu không gian SQL Server 2008 (Open Geospatial Consortium OGS) được hỗ trợ kể từ Entity Framework 5. Các nhà cung cấp khác (Devart for Oracle) cũng được hỗ trợ. Xem msdn.microsoft.com/en-us/data/dn194325 .
subsci

6

Tôi nghĩ rằng nếu bạn cần phát triển một thứ gì đó nhanh chóng mà không có thứ lạ ở giữa và bạn cần cơ sở để có các thực thể đại diện cho các bảng của bạn:

Linq2Sql có thể là một đồng minh tốt, sử dụng nó với LinQ giải phóng thời gian phát triển tuyệt vời.


4
"Không có những điều kỳ lạ ở giữa", ok Ý của bạn là gì. Ví dụ về một "điều kỳ lạ ở giữa"
positiveGuy

Sẽ rất tốt nếu chỉnh sửa hoặc xóa câu trả lời này, nó không còn hữu ích cho sự phát triển hiện đại và có thể khiến mọi người đi sai hướng.
Giulio Caccin

6

Tôi đang làm việc cho khách hàng có một dự án lớn đang sử dụng Linq-to-SQL. Khi dự án bắt đầu, đó là sự lựa chọn rõ ràng, bởi vì Entity Framework đang thiếu một số tính năng chính tại thời điểm đó và hiệu suất của Linq-to-SQL tốt hơn nhiều.

Bây giờ EF đã phát triển và Linq-to-SQL đang thiếu hỗ trợ async, điều này rất tốt cho các dịch vụ có khả năng mở rộng cao. Đôi khi chúng tôi có hơn 100 yêu cầu và mặc dù chúng tôi đã tối ưu hóa cơ sở dữ liệu của mình, hầu hết các truy vấn vẫn mất vài mili giây để hoàn thành. Do các cuộc gọi cơ sở dữ liệu đồng bộ, luồng bị chặn và không có sẵn cho các yêu cầu khác.

Chúng tôi đang suy nghĩ để chuyển sang Entity Framework, chỉ dành cho tính năng này. Thật đáng tiếc khi Microsoft đã không triển khai hỗ trợ không đồng bộ vào Linq-to-SQL (hoặc nguồn mở nó để cộng đồng có thể làm điều đó).

Phụ lục tháng 12 năm 2018: Microsoft đang chuyển sang .NET Core và Linq-2-SQL không hỗ trợ trên .NET Core, vì vậy bạn cần chuyển sang EF để đảm bảo bạn có thể di chuyển sang EF.Core trong tương lai.

Ngoài ra còn có một số tùy chọn khác để xem xét, chẳng hạn như LLBLGen . Đó là một giải pháp ORM trưởng thành đã tồn tại từ lâu và đã được chứng minh nhiều bằng chứng trong tương lai sau đó là các giải pháp dữ liệu MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).


2

Linq-to-SQL

Nó là nhà cung cấp, nó chỉ hỗ trợ SQL Server. Đây là một công nghệ ánh xạ để ánh xạ các bảng cơ sở dữ liệu SQL Server sang các đối tượng .NET. Đây là nỗ lực đầu tiên của Microsoft tại ORM - Mapper Relative Relper.

Linq-to-Thực thể

Cũng giống như vậy, nhưng sử dụng Entity Framework trong nền, như ORM - một lần nữa từ Microsoft, Nó hỗ trợ nhiều cơ sở dữ liệu của khung thực thể là nhà phát triển có thể làm việc trên bất kỳ cơ sở dữ liệu nào, không cần phải học cú pháp để thực hiện bất kỳ hoạt động nào trên các cơ sở dữ liệu khác nhau

Theo kinh nghiệm cá nhân của tôi, Ef tốt hơn (nếu bạn không biết gì về SQL) hiệu suất trong LINQ nhanh hơn một chút so với lý do ngôn ngữ LINQ được viết bằng lambda.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.