2009-03-06 44 views
10

Khi tôi làm việc lần cuối trong lập trình, chúng tôi đã cố gắng di chuyển ra khỏi DataReaders và API ADO.NET truyền thống về phía Ánh xạ quan hệ đối tượng (ORM).Lớp cơ sở dữ liệu .NET và cơ sở dữ liệu

Để thực hiện việc này, chúng tôi đã tạo một số DataContext của DB qua sqlmetal. Sau đó, có một lớp dữ liệu mỏng tạo ra DataContextprivate và bất kỳ mã nào cần truy cập vào cơ sở dữ liệu sẽ phải sử dụng phương thức public trong lớp dữ liệu mỏng này. Những phương pháp này đã được lưu trữ cơ bản thủ tục; họ sẽ thực hiện các truy vấn trên cơ sở dữ liệu thông qua LINQ to SQL.

Đây có phải là cách tiếp cận phổ biến hiện nay không? Tôi có nghĩa là, là tất cả mọi người có sử dụng NET Framework 3.5. Thực sự chạy sqlmetal trong quá trình xây dựng của họ, hoặc những gì? Nó gần như có vẻ như một hack vào thời điểm đó. Về cơ bản, tôi muốn biết nếu LINQ to SQL và sqlmetal là những gì mong đợi nếu tôi đang đi để viết một DAL ngày hôm nay tại một cửa hàng .NET 3.5 mà không sử dụng một bên thứ ba, mở- ORM nguồn.

+0

Tôi cũng muốn biết. Tôi đã sử dụng DAL/ORM của riêng tôi trong hơn một năm và tất cả những gì tôi thấy là những thứ sắp tới và đi từ MS (linqToSQL một trường hợp tại điểm). Tôi đang giữ cho tôi bây giờ. –

+0

cùng ở đây ... những gì tôi có, tôi đã thực hiện một dự án trong linq2sql gần đây để xem liệu tôi có bỏ sót thứ gì đó quan trọng hay không, và trong khi OK, không đủ để tôi chuyển ... Tôi đang gắn bó với các nhà quản trị dữ liệu và các thủ tục được lưu trữ và các lớp tùy chỉnh để xử lý mọi thứ. –

+0

Thật tuyệt vời khi thấy .NET phát triển, nhưng một chút bực mình khi cố gắng tìm ra con ngựa nào để đặt cược! :) – core

Trả lời

3

Cách tiếp cận của bạn tốt. Tôi hiện đang sử dụng dịch vụ Astroria (ADO.NET Data Services). Có một giới thiệu thú vị trong số MSDN Magazine về việc này.

Tôi cũng thích mới PLINQO (yêu cầu CodeSmith Tools mặc dù). Điều này là rất trơn trong quan điểm của tôi.

Khi tôi có một DAL (lớp dịch vụ), tôi chỉ sử dụng dịch vụ này từ ứng dụng khách của tôi (Silverlight hoặc ASP.NET MVC).

3

Tôi nghĩ rằng nó phụ thuộc vào việc sử dụng của bạn nhưng tôi muốn nói với một lớp dữ liệu mỏng như bạn đã giải thích đó sẽ là DAL của bạn. Hầu hết các dự án sẽ xây dựng một lớp khác trên đó chủ yếu để chỉnh sửa/tạo logic và có thể một số logic ghép cho được.

Đối với hầu hết các dự án của tôi, tôi thiết kế nó như thế này.

Repository giữ thể hiện của DataContext và đưa ra một số add cơ bản/xóa các phương pháp
ProductRepository: Repository cho thấy các truy vấn chung (IQueryable)
StoreService sử dụng một thể hiện của các kho khác nhau như ProductRepository, SalesRepository và xử lý tất cả các logic để tạo một cái gì đó như một sản phẩm.

Vì vậy, một cái gì đó giống như ...

StoreService.CreateProduct(/* properites */) 

này sẽ quay trở lại một số loại lớp kết quả.

+0

Tôi biết tôi không phải là người duy nhất sử dụng phương pháp này cho dòng ứng dụng kinh doanh thông thường! Tính duy trì và tách biệt các mối quan tâm là lợi ích lớn nhất kể từ khi tôi bắt đầu phát triển với phương pháp này. –

5

Vẫn được coi là phương pháp hay nhất để có một số loại lớp truy cập dữ liệu. Cho dù điều này là tốt nhất đạt được với một ORM là một vấn đề tranh luận rất nhiều. Có một phe nói chung cho rằng ORM là con đường để đi. Một phe khác lập luận rằng các thủ tục được lưu trữ và trung tâm cơ sở dữ liệu là tuyến đường tốt nhất.

Ngoài ra, điều này có thể không được chính xác các poster bạn có nghĩa là, nhưng nó tương tự (và cũng là một trong tủ của tôi)

http://download.microsoft.com/download/4/a/3/4a3c7c55-84ab-4588-84a4-f96424a7d82d/NET35_Namespaces_Poster_LORES.pdf

1

trang web rất này sử dụng LINQ to SQL, vì vậy hãy rằng khi bạn sẽ.

Chính thức, Microsoft đang hỗ trợ Entity Framework qua LINQ to SQL về phát triển mới. Tuy nhiên, có một nhóm giọng hát của những người nghĩ rằng EF is the wrong way to go. LINQ to SQL sẽ vẫn tồn tại trong một thời gian, và là một ORM rất phong nha, nếu phần nào hạn chế về điều khoản phụ trợ DB mà bạn có thể sử dụng.

Tôi muốn giới thiệu LINQ làm điểm khởi đầu tuyệt vời cho ORM của bạn. Nếu bạn cần tốt hơn, hãy nhìn vào EF và/hoặc NHibernate.

+0

Bạn có biết nếu có bất kỳ phản ứng chính thức nào đối với các mối quan ngại được nêu ra với "phiếu bầu không có sự tự tin" đó không? –

+0

Tôi không có bất kỳ liên kết nào vào lúc này, cũng như tôi không thích đào bới, nhưng tôi chắc chắn rằng dòng chính thức là một thứ gì đó dọc theo dòng chữ "vít, chúng tôi đang làm EF theo cách chúng tôi muốn". Tôi chắc chắn nó đã được nhiều máy tính hơn thế, tuy nhiên. :) Tôi nghĩ rằng họ nói rằng rất nhiều vấn đề sẽ được sửa trong các phiên bản sau. Giao hàng sớm/thường xuyên, v.v. – Randolpho

0

"Đây có phải là cách tiếp cận chung ngày hôm nay không? Ý tôi là, mọi người có sử dụng khuôn khổ .NET 3.5 thực sự đang chạy sqlmetal trong quá trình xây dựng của họ hay gì?"

Những người tôi biết bằng cách sử dụng Khung 3.5 (và đó chỉ là về mọi người) - đại đa số - vẫn đang sử dụng NHibernate. Phiên bản 2.0 là một OR/M rất đẹp. Tôi bắt đầu sử dụng nó trên một dự án gần đây và nó cắt mã truy cập dữ liệu của tôi xuống đáng kể, đến mức mà tôi thực sự không muốn sử dụng bất cứ điều gì khác trong tương lai. Và API NHibernate Fluent đang thực hiện một số hướng cho những người không thích ánh xạ XML.

3

Lớp dữ liệu tốt nhất là lớp dữ liệu đơn giản và đơn giản và hoàn thành công việc mà không cần bất kỳ chuông nào. Tôi đã sử dụng các công nghệ bạn đã đề cập và viết về chúng ở đây: The Only Pattern for Data Access is - There Are No Patterns for Data Access

+0

Tôi đồng ý. Tôi đọc blog của bạn và nó có ý nghĩa. Cảm ơn bạn đã xác nhận tôi cần. – stepanian

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