2009-04-30 31 views
6

Tôi đang xem xét dành thời gian học tập và sử dụng LINQ to SQL nhưng sau nhiều năm thực hành tốt nhất khuyên KHÔNG nhúng SQL Tôi đang gặp khó khăn trong việc thay đổi mô hình.Chuyển sang LINQ

Tại sao nó có vẻ được chấp nhận ngay bây giờ để nhúng truy vấn vào mã được biên dịch? Có vẻ như gần như một bước lùi với tôi theo một số cách.

Có ai có vấn đề với sửa lỗi truy vấn/biên dịch/triển khai sau khi chuyển sang LINQ không?

Tôi nghĩ rằng tôi vẫn có thể đợi Khung thành thực thể hoàn thành.

Bạn nghĩ sao?

+4

+1 để chỉ ra việc nhúng SQL vào mã được biên dịch của bạn là một thực tế không tốt! Tôi đi với bạn! –

Trả lời

8

Lợi thế của LINQ đối với Sql là nó không thực sự nhúng truy vấn trong mã được biên dịch - không thực sự. Câu lệnh Linq có nghĩa là mã .Net của bạn thực sự có logic cần thiết để xây dựng câu lệnh Sql được nhúng, chứ không phải Sql thô. Nó thực sự làm cho rất nhiều ý nghĩa để có. Net mã chuyển đổi trực tiếp đến Sql để thực thi, chứ không phải là một danh sách dài của sprocs với tài liệu liên quan. Các tính năng chính: Cách Linq là dễ dàng hơn nhiều để duy trì và cải thiện.

Tôi không nghĩ rằng tôi muốn chuyển dự án hiện tại sang LINQ - thực sự nó là sự thay thế cho toàn bộ lớp dữ liệu và nó có thể thay đổi cách truy cập vào lớp đó. Trừ khi bạn đang chuyển từ một mô hình rất giống nhau, chi phí sẽ là quá cao đối với bất kỳ lợi nhuận tiềm năng nào.

LINQ đối với sức mạnh thực sự của Sql là tạo nhanh các ứng dụng mới - nó cho phép bạn nhanh chóng tạo mã lớp dữ liệu.

+1

Đồng ý, ngoại trừ LINQ to Entities có thể là một nơi tốt hơn để bắt đầu ngay bây giờ (nhưng tất cả các nhận xét tương tự đều áp dụng các truy vấn nhúng). – Richard

+0

Tôi đã phát triển một dự án lớn trên EF vì nó đã được thử nghiệm (6 tháng nay), tôi rất tiếc. EF chưa sẵn sàng sản xuất. Linq2SQL là. EF vì nó bây giờ là loại truy cập dữ liệu được sao lưu một nửa, rất nhiều khoảng trống, truy vấn không hiệu quả, triển khai LINQ không đầy đủ, thiếu hụt dữ liệu, và mô hình objec và servicind kém. Tiết kiệm cho mình nỗi đau và sử dụng Linq2SQL mà là một công nghệ tuyệt vời. Vâng, xem EF vNext tốt như thế nào, nhưng cho đến lúc đó sự giải thích của tôi là để tránh xa nó, nó quá nhiều rắc rối. –

2

Bạn cần phải suy nghĩ về LINQ to SQL như là một trừu tượng ở trên viết SQL trực tiếp cho mình. Nếu bạn có thể xoay đầu xung quanh thì bạn đã thực hiện một bước đi đúng hướng. Bạn cũng cần phải từ bỏ một số niềm tin lâu dài như sprocs biên dịch luôn nhanh hơn và các tài khoản SQL không nên có đặc quyền đọc/ghi dữ liệu.

Tôi thấy rằng có thể bắt đầu dần dần chuyển các giải pháp hiện có sang LINQ to SQL miễn là có DAL rõ ràng và bạn chỉ thay đổi triển khai mà không ảnh hưởng đến hợp đồng có thể có với mã tiêu thụ. Danh sách tham chiếu là một ứng cử viên dễ dàng vì chúng có tác động thấp, chỉ đọc bộ dữ liệu. Điều chính bạn cần lưu ý là nếu trang bị thêm là tên lớp mơ hồ tiềm năng nếu bạn đã mã hóa chúng để tạo mô hình cơ sở dữ liệu.

Với giá trị của sự hiểu thấu trong việc đưa LINQ to SQL vào một doanh nghiệp lớn (kể từ ngày CTP), tôi sẽ làm điều đó một lần nữa trong một nhịp tim. Nó không hoàn hảo và có những vấn đề nhưng có những lợi ích to lớn đặc biệt là khi nói đến tốc độ phát triển và khả năng bảo trì. Đó là một mô hình mới và chắc chắn, chắc chắn là một bước tiến.

3

tôi undertand quan điểm của bạn, điều này không thực sự có vẻ như một chút của một bước lùi ...

Thật sự tôi có lẽ sẽ chỉ đạo ra khỏi LINQ to SQL và tìm kiếm hơn tại LINQ to Entities, các đơn vị của bạn mô hình khái niệm của bạn mô hình dữ liệu và tôi personaly cảm thấy thoải mái hơn nhúng truy vấn một lần nữa một mô hình khái niệm trong mã của tôi. Mô hình vật lý thực tế được trừu tượng hóa khỏi bạn bởi một khung thực thể.

Liên kết này (xin lỗi các chơi chữ) thảo luận về LINQ to Entities và khung Entity: http://msdn.microsoft.com/en-us/library/bb386992.aspx

Đây là một bài viết thú vị discussign những ưu và nhược điểm của cả hai phương pháp: http://dotnetaddict.dotnetdevelopersjournal.com/adoef_vs_linqsql.htm

Sửa Một suy nghĩ, nếu bạn không muốn chờ EF, hãy xem NHibernate, bạn cũng có thể LINQ với điều đó ... Xem http://www.hookedonlinq.com/LINQToNHibernate.ashx

+1

Về lý thuyết, có. Nhưng trong thực tế tôi sẽ thực sự do dự để phát triển bất kỳ mã sản xuất dựa trên Entity Framework/Linq-to-Entities. Linq-to-SQL sẵn sàng cho sản xuất, EF thì không. Mặc dù nó như bạn nói thêm một lớp trừu tượng thêm, trừu tượng đó đi kèm với chi phí của các truy vấn SQL không hiệu quả sắp ra ở đầu bên kia (phía db). EF vNext - có thể, nhưng bồi thẩm đoàn vẫn còn trên đó. Chúng tôi sẽ chỉ phải xem những gì nó mang lại khi nó được phát hành nhưng đi cho EF bây giờ (với sự thành công hay thất bại vẫn còn là một ẩn số lớn) không phải là một cái gì đó tôi muốn giới thiệu. Chỉ 2 xu của tôi ... :) – KristoferA

+1

Hoàn toàn đồng ý ... nhưng không có giải pháp nào là hoàn hảo, trên cái này tôi sẽ đợi EF. Một điều rõ ràng với tôi, LINQ là mạnh mẽ và hữu ích và đáng học tập trong quyền riêng của nó :-) –

+0

EF 1.0 bị giới hạn nhưng nó hoạt động và có thể sử dụng trong môi trường sản xuất. Giống như tất cả mọi thứ nó cần một chút học tập và có một vài hacks cần thiết để vượt qua những hạn chế (cả trong các tính năng của khuôn khổ và IDE). Tuy nhiên, trong khi giới hạn trong một số cách nó là đủ vững chắc và là một cách nhanh chóng để có được một ứng dụng và đi .. và việc học bây giờ sẽ tiết kiệm được việc học sau này khi nó làm sạch cho phiên bản 2 ... Tôi có nghĩa là 4 (?) . – misteraidan

0

Có một triển khai LINQ to SQL không chỉ cho cơ sở dữ liệu SQL Server, vì vậy SQL Server devel opers cũng có thể tận dụng lợi thế của việc sử dụng ORM hiệu quả này. Chúng tôi đã thêm hỗ trợ cho LaodWith cấp truy vấn() và mở rộng xử lý lỗi. Ngoài ra chúng tôi dự định hỗ trợ cả ba mô hình kế thừa (TPH, TPT, TPC) và tạo trường khóa. Bạn có thể tìm danh sách cơ sở dữ liệu được hỗ trợ here

+0

AND hoàn toàn miễn phí cho chúng tôi? –

0

Tôi không nghĩ rằng việc nhúng SQL vào mã của bạn bằng cách nhúng tên Proc được lưu trữ trong mã của bạn. Thường xuyên hơn không phải là một thay đổi để Proc của bạn liên quan đến việc thay đổi mã của bạn anyway. Ví dụ, bạn thường cần thêm một tham số mới vào/ra hoặc cập nhật một phương thức getter/setter để tham chiếu một cột mới.

Những gì nó làm là loại bỏ rất nhiều công việc chân viết nhiều gấp hai lần mã để căn chỉnh các thuộc tính và phương thức trong mã của bạn với procs và cột trong DB của bạn.