7

Tôi đang chuẩn bị một dự án Windows mới và tự hỏi loại công nghệ DAL nào sẽ sử dụng. Ban đầu tôi đã tìm kiếm một cái gì đó đơn giản hơn để không dành quá nhiều thời gian để xây dựng nó. Nhưng tôi cũng hiểu rằng nó phải hiệu quả và có thể mở rộng trong thời gian dài.Dự án .NET 3.5 mới: Công nghệ DAL nào được sử dụng?

Tôi định sử dụng WPF (MVVM) Ứng dụng khách và Dịch vụ WCF trên hệ thống 3 cấp.

Chỉ cần để tổng hợp tất cả các công nghệ hiện có Tôi quen thuộc với:

DataSets

PRO: Có thể là một chút cũ lỗi thời, nhưng rất dễ sử dụng và cho phép những phần nhất để được tự động được tạo cho bạn. Một khía cạnh mạnh mẽ về bộ dữ liệu là dễ dàng di chuyển dữ liệu liên quan thông qua Quan hệ. Cũng theo cách nó bị ngắt kết nối khỏi cơ sở dữ liệu và có thể đơn giản hóa các bản cập nhật bằng cách tự động kiểm tra dấu thời gian. Bao gồm xác thực.

CONTRA: Khá cũ. Một số coi chúng là không có các đối tượng/mô hình kinh doanh thực tế mà chỉ là một bản sao của các bảng dữ liệu SQL của bạn. Việc chuyển chúng giữa WCF Service/Client có thể khó khăn hơn các đối tượng nghiệp vụ tự tạo.

Thư viện Enterprise 4.1 - Data Access Khối

PRO: Các Dal là đẹp đưa vào một mô hình Nhà máy. Nó sẽ tự động mở kết nối và đóng tự động. Rất dễ sử dụng cho hầu hết các phần. Nó hỗ trợ cả hai dataSets và SQL Sps bình thường để tạo các đối tượng nghiệp vụ của riêng bạn. Là một phần của một Framework đang diễn ra, nó có thể hiệu quả hơn nhiều khi sử dụng kết hợp với phần còn lại của Thư viện doanh nghiệp để có một sản phẩm cuối cùng hiệu quả.

CONTRA: ??

LINQ to SQL

PRO: Tự động tạo ra các bảng SQL thành các đối tượng kinh doanh. Dễ dàng để CRUD. Về mặt lý thuyết, một cách rất hay để làm điều đó.

CONTRA: Đã chơi xung quanh với nó khi nó ra, tôi thấy nó flaky và đôi khi không ổn định. Nó đã được coi là một công nghệ đã chết sau khi Microsoft thông báo rằng Entity Framework 4.0 - như là một phần của .NET 4.0 - sẽ được Microsoft đề nghị. Chỉ có một vài sửa lỗi cũng được mong đợi trong .NET 4.0 nhưng không có thêm tính năng mở rộng kế hoạch.

Entity Framework 4.0

Tôi không biết bất cứ điều gì về nó, nhưng duy nhất mà nó sẽ thay thế mọi thứ khác như trên .NET 4.0. Tôi cũng bị cám dỗ để sử dụng nó, tuy nhiên kể từ khi nó vẫn còn trong BETA, tôi sẽ không thể đi theo cách đó được nêu ra.

Tôi rất cám dỗ khi sử dụng Thư viện doanh nghiệp 4.1 - Chặn truy cập dữ liệu và để tạo đối tượng kinh doanh của riêng tôi. Con lớn là nó sẽ mất nhiều thời gian hơn để tạo ra DAL. Trừ khi ai đó có thể thuyết phục tôi sử dụng DataSets thông qua Khối truy cập dữ liệu thay thế.

Ý kiến ​​và ý tưởng của bạn là gì? Rất cám ơn, Kave

Trả lời

3

Bạn đề cập đến khung thực thể như một phần của "contra" cho tùy chọn LINQ to SQL, nhưng bạn nên xem xét nó thay cho LINQ to SQL - nó cung cấp khá nhiều chức năng tương tự cộng thêm. Đối với các dự án có cơ sở dữ liệu nhỏ hơn, nó chắc chắn cung cấp rất nhiều bang cho buck. Nó có thể là một thách thức trong EF để quản lý bối cảnh cho các cơ sở dữ liệu lớn hơn, và các thay đổi lược đồ có thể gây ra mọi thứ để phá vỡ, nhưng những thách thức này có ở đó với bất kỳ cách tiếp cận truy cập dữ liệu nào.

Con lớn nhất cho EntLib, trong tâm trí của tôi, là bạn vẫn đang lăn các đối tượng dữ liệu của riêng bạn. Thư viện doanh nghiệp lấy đi rất nhiều đoạn mã của hệ thống ống nước từ một triển khai ADO.NET "cũ", rất hay, nhưng nó không tạo ra các đối tượng dữ liệu cho bạn có thể được sử dụng trong hộp để truy vấn LINQ.

+0

Tôi đã đưa ra một số suy nghĩ và tôi nghĩ bạn đúng. Sử dụng EntLib vẫn có nghĩa là rất nhiều công việc tạo ra mọi thứ bằng tay. Khi bạn đề cập đến EF, ý của bạn là phiên bản 4.0 BETA hay ý bạn là phiên bản 1.0 thực tế? Tôi đã thực sự cố gắng phiên bản 1.0 đêm qua và tôi phải nói rằng nó trông khá ổn và thực hiện công việc. Ngay trước đó, tôi đã thử SubSonic, không tạo được mã cho các bảng tra cứu của tôi, có cùng tên với một trong các trường hiện có của chúng. Điều này phải có lẫn lộn Subsonic. EF 1.0 đã hoàn thành tốt công việc và tôi nghĩ tôi sẽ đi theo cách này. Bạn nghĩ sao? – Houman

+0

EF 1 không phải là bất cứ nơi nào gần như là tính năng phong phú như LinqToSql và LinqToSql là khá nghèo tính năng khôn ngoan. EF 1 thiếu hỗ trợ cho các khái niệm ORM cơ bản như hỗ trợ tải lười biếng thích hợp, mà LinqToSql không hỗ trợ. –

+0

Tôi đã sử dụng EF 1.0 cho một vài ứng dụng, những ứng dụng có cơ sở dữ liệu nhỏ hơn và không hoạt động quan trọng, và đã hài lòng với nó - yêu cầu cơ bản là "lấy dữ liệu vào và ra khỏi cơ sở dữ liệu". Nếu các tính năng, khả năng mở rộng và hiệu suất là một mối quan tâm lớn, bạn vẫn có thể thử EF, nhưng có thể muốn truy cập dữ liệu trừu tượng bằng cách sử dụng một lớp phần mềm khác hoặc CSLA để bạn có thể chuyển đổi hoặc nâng cấp công nghệ truy cập dữ liệu sau này. Tất nhiên, tại thời điểm đó, các lợi ích RAD có thể không còn ở đó nữa và bạn có thể muốn xem xét một ngăn xếp tùy chỉnh đầy đủ. –

1

A. Kiểm tra cũng NHibernate.

B. Số liệu - nhanh nhất và dễ nhất, nhưng bạn viết mã rất nhiều.

Tất cả phần còn lại - có rất nhiều điều tốt trong việc sử dụng các công cụ ORM, nhưng có rất nhiều vấn đề với 3 phân nhánh với chúng.

(tải lười biếng là một vấn đề để đối phó với, làm cho rất nhiều cây đối tượng lớn mà hiệu suất có hiệu lực, bộ nhớ đệm không phải là thông minh càng tốt)

Vì vậy - nó phụ thuộc là những gì nhu cầu lớn của bạn, và bao nhiêu thời gian bạn muốn dành học EL/LINQ hoặc NHibernate trước khi bạn bắt đầu viết mã, b/c có IS một đường cong học tập với các công cụ này.

2

Chúng tôi ưu tiên sử dụng DataSets với Chặn ứng dụng dữ liệu EntLib 4.1.

Hiện tại, chúng tôi sử dụng Khung thực thể. Chúng tôi đã đạt được một cải tiến lớn về năng suất với Entity Framework so với EntLib 4.1. (Progam lớp dữ liệu cho 80 bảng trong 10 giờ thay vì 80)

Entity Framework 4 vẫn đang trong giai đoạn Beta, nhưng nếu trước khi dự án của bạn hoạt động, tôi sẽ đi với EF 4. Bạn nhận được năng suất của ORM đồng thời tính linh hoạt của việc sử dụng POCO (đối tượng Clr cũ)

+0

Cảm ơn bạn đã chia sẻ kinh nghiệm của mình. Đó là EF 1.0 hoặc EF 4.0 Beta bạn đã sử dụng? – Houman

+0

@Kave, đó là EF 1.0, nhưng chúng tôi đã bắt đầu sử dụng nó khi đang ở phiên bản Beta –

1

Ý tưởng tốt nhất là có cơ hội sử dụng cả hai công nghệ cùng một lúc. Bạn có thể làm như thế nào? Nó rất đơn giản với mẫu Repository. Lúc đầu, bạn cần tạo giao diện IRepository chung. Một cái gì đó như thế này:

public interface IERepository<E> 
{ 
    DbTransaction BeginTransaction(); 
    void EndTransaction(); 
    void Add(E entity); 
    void Delete(E entity); 
    int Save(); 

    ObjectQuery<E> DoQuery(string entitySetName); 
    IList<E> SelectAll(string entitySetName); 
    E SelectByKey(int Key); 

    bool TrySameValueExist(string fieldName, object fieldValue, string key); 
    bool TryEntity(ISpecification<E> selectSpec); 

    int GetCount(); 
    int GetCount(ISpecification<E> selectSpec); 
    int AddAndSave(E entity); 

} 

Tôi thích Khung thực thể hơn. Tôi đã tạo 3 dự án dựa trên nó. Nó hoạt động rất nhanh, đặc biệt là các truy vấn với phân trang. Vì vậy, sau khi bạn cần tạo kho cơ sở chung Kho lưu trữ với các phương thức ảo, những gì thực hiện giao diện IRepository. Và đó là tất cả. Bây giờ bạn có cách rất nhanh để tạo ra Dal viết mã đơn giản như thế này:

public class MonthRepository:Repository<Month> 
{ 

} 

Bạn có khả năng để ghi đè lên tất cả các phương pháp của lớp cơ sở và tạo quyền truy cập vào DB sử dụng thủ tục lưu trữ mà bạn cần. Và bạn có thể làm mà không cần thay đổi mã ở những nơi khác. Bạn vẫn sẽ trả lại cùng một loại thực thể nhưng sẽ nhận chúng theo cách khác.

Reade thêm về http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

+0

Cảm ơn bạn đời. Giải pháp này nghe có vẻ thực sự thú vị nếu nó cho tôi sự linh hoạt hơn để trao đổi Kho lưu trữ. Tôi vẫn cần phải hiểu nó đầu tiên mặc dù. Hãy cho tôi một vài ngày để nghiên cứu nó afetr làm việc xin vui lòng. ; o) – Houman

1

NHibernate có sự pha trộn tổng thể tốt nhất của tính năng thiết lập, trưởng thành, và hỗ trợ.

NHibernate, Entity Framework, active records or linq2sql

Bạn nên cân nhắc LINQ hỗ trợ ưu tiên hàng đầu đối với bất kỳ giải pháp bạn xem xét và hai bạn tùy chọn đầu tiên trên không hỗ trợ LINQ.

+0

Xin chào Michael, Tôi cũng đã đọc về NHibernate. Tôi tìm thấy tài liệu không thẳng về phía trước và có vẻ như là một ứng dụng rất phức tạp để chạy. Trừ khi bạn biết một số trang web walkthorugh tôi chưa biết, tôi cảm thấy một chút bị mất ở đó. Unfortunatelly SubSonic không hoạt động cho tôi do lỗi. Hiện vẫn còn dự án Castle tôi có thể thử, hoặc chỉ gắn bó với các giải pháp MS như EF 1.0 với hy vọng sẽ sớm nâng cấp lên phiên bản v4.0 một lần. – Houman

+0

Nếu bạn không thể tìm thấy cách của bạn xung quanh NHibernate, bạn không có khả năng để có được những gì bạn cần từ LinqToSql hoặc EntityFramework hoặc. Tài liệu của NHibernate không thực sự tồi tệ hơn bất kỳ tài liệu nào khác của ORM. Có một đường cong học tập cho bất kỳ ORM, đường cong của NHibernate hiện chỉ mới bắt đầu sớm hơn. NHibernate có khả năng đáp ứng yêu cầu của bạn trong khi những người khác có khả năng chỉ đáp ứng yêu cầu của bạn cho đến một điểm nhất định và sau đó bạn kết thúc bắt đầu lại với NHibernate anyway. Cuối cùng, đó là cuộc gọi của bạn và trách nhiệm của bạn. –

+0

Cảm ơn Michael. Bạn nghĩ gì về Fluent NHibernate? Đây có phải là một loại trình hướng dẫn để tự động tạo bản đồ cho tôi không? Có công cụ trợ giúp nào để làm cho cuộc sống dễ dàng hơn với NHibernate không? – Houman

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