13

Tôi đã đọc trên thế giới blog trong tuần vừa qua rằng LINQ to SQL đã chết [và sống lâu EF và Linq đến các thực thể]. Nhưng khi tôi đọc tổng quan về MSDN, nó xuất hiện với tôi LINQ to Entities tạo ra eSQL chỉ là cách mà LINQ to SQL tạo ra các truy vấn SQL.Khuôn khổ thực thể & LINQ to SQL - Xung đột lợi ích?

Bây giờ, kể từ khi triển khai cơ bản (và vì SQL Server chưa phải là ODBMS) vẫn là một cửa hàng quan hệ, tại một thời điểm nào đó khung thực thể phải dịch sang truy vấn SQL. Tại sao không sửa vấn đề LINQ to SQL (m: m mối quan hệ, chỉ hỗ trợ máy chủ SQL, v.v.) và sử dụng LINQ to SQL trong khi lớp tạo ra các truy vấn này?

Đây có phải là do hiệu suất hoặc EF sử dụng một cách khác để chuyển câu lệnh SQL thành SQL?

Dường như đối với tôi - ít nhất là đối với tâm trí không được học của tôi - một sự phù hợp tự nhiên để dogfood Linq to SQL trong EF.

Nhận xét?

Trả lời

15

Điều đáng chú ý là Entity Framework có (ít nhất) ba cách cơ bị tiêu thụ:

  • LINQ to Entities qua Dịch vụ Object qua pháp nhân khách hàng
  • Entity SQL trên Dịch vụ Object qua pháp nhân khách hàng
  • Thực thể SQL sử dụng đối tượng lệnh Entity Client (hầu hết tương tự như ADO.NET cổ điển)

Thực thể khách hàng cuối cùng sẽ tạo ra một biểu diễn của lệnh ESQL (trong một dạng cơ sở dữ liệu kinh điển, cơ sở dữ liệu) mà Nhà cung cấp ADO.NET cho RDBMS cụ thể chịu trách nhiệm chuyển đổi thành lưu trữ SQL cụ thể. Đây là mô hình IMHO phù hợp trong nhiều năm qua đã được đầu tư (và sẽ tiếp tục được đầu tư) để sản xuất các nhà cung cấp ADO.NET tuyệt vời cho mỗi cửa hàng.

Vì khung thực thể cần làm việc với nhiều cửa hàng và do đó nhiều nhà cung cấp ADO.NET có ít phạm vi hơn để dễ dàng tối ưu hóa những gì khách hàng tạo ra trên cơ sở mỗi cửa hàng (ít nhất - đó là nơi chúng tôi có v1) . Nhóm LINQ to SQL có một vấn đề nhỏ hơn nhiều để giải quyết - "chỉ hoạt động với SQL Server" và do đó có thể lưu trữ các công cụ cụ thể dễ dàng hơn. Tôi biết nhóm EF nhận thức được rằng có những trường hợp EF đến SQL Server đang sản xuất TSQL kém hiệu quả hơn L2S và đang làm việc để cải thiện điều này cho V2.

Điều thú vị là mô hình này cho phép các khả năng mới được thêm vào giữa Máy khách thực thể và Nhà cung cấp ADO.NET cho một cửa hàng. Những "nhà cung cấp gói" này có thể thêm các dịch vụ như đăng nhập, kiểm tra, bảo mật, lưu vào bộ nhớ đệm. Điều này được thảo luận dưới dạng tính năng V2 tại số http://blogs.msdn.com/efdesign/archive/2008/07/09/transparent-caching-support-in-the-entity-framework.aspx

Nếu bạn nhìn vào bức tranh lớn hơn, bạn có thể thấy khó khăn và thực sự hạn chế để thử và bằng cách nào đó trang bị lại thế hệ L2S TSQL cho kiến ​​trúc khung thực thể.

1

Sự khác biệt lớn giữa LINQ to SQL và Entity Framework là EF thực hiện đặc tả mô hình dữ liệu thực thể (EDM) và có các sản phẩm khác được xây dựng xung quanh EDM, như ADO.NET Data Services (aka Astoria).

EDM hiện đang được sử dụng để mở rộng AtomPub trong thông số mới được gọi là Giao thức dữ liệu mở (OData http://odata.org/), được sử dụng để điều chỉnh CRUD trên đầu REST.

+7

và đó là lý do tại sao nhiều người cho rằng LINQ to SQL là tốt hơn! –

5

Thực ra, EF không tạo EntitySQL khi dịch LINQ truy vấn.Trong EF, chúng tôi có một đại diện dựa trên cấu trúc dữ liệu cho tất cả các truy vấn được gọi là cây truy vấn CQT hoặc cây truy vấn chuẩn. Cả trình biên dịch LINQ và trình phân tích cú pháp của EntitySQL tạo ra các CQT và phần còn lại của đường dẫn dịch truy vấn sử dụng các CQT (và các dạng trung gian nội bộ khác), sau khi các biến đổi khác nhau làm cho nó trở thành nhà cung cấp ADO.NET. sau đó chịu trách nhiệm dịch nó sang phương ngữ SQL của phụ trợ. Vì vậy, các đường dẫn là LINQ -> CQT -> SQL hoặc EntitySQL -> CQT -> SQL.

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