7

Theo MSDN các DbSet:Tại sao tôi nên xây dựng một mô hình kho lưu trữ với một đơn vị công việc trên đầu EF của tôi?

DbSet<TEntity> Class 

Một DbSet represents the collection of all entities in the context, hoặc có thể được truy vấn từ cơ sở dữ liệu, của một loại nhất định. Các đối tượng DbSet được tạo từ một DbContext bằng phương thức DbContext.Set.


Và theo MSDN các DbContext:

DbContext Class 

Một DbContext instance represents a combination of the Unit Of Work and Repository patterns như vậy mà nó có thể được sử dụng để truy vấn từ một cơ sở dữ liệu và nhóm lại với nhau thay đổi mà sau đó sẽ được được viết lại cho cửa hàng làm đơn vị. DbContext là khái niệm tương tự như ObjectContext.


Vì vậy mà các EF sử dụng repository patternUOW nội bộ.

DbSet < ----> Kho

DbContext < ----> đơn vị làm việc

Tại sao tôi nên xây dựng một mô hình kho với một đơn vị công việc trên đỉnh EF của tôi?

+2

Bạn không nên. Mặc dù một lớp dịch vụ nơi bạn có thể củng cố logic kinh doanh của bạn là khôn ngoan. – Shoe

Trả lời

7

Tại sao tôi nên tạo một mẫu kho lưu trữ với một đơn vị công việc trên đầu EF của tôi?

Phụ thuộc vào cách bạn muốn quản lý các phụ thuộc của mình.

Nếu khung thực thể là lớp trừu tượng của bạn và chính cơ sở dữ liệu là phụ thuộc, thì khung thực thể thực sự đã cung cấp kho lưu trữ và đơn vị công việc của bạn. Thương mại-off là tên miền của bạn dựa trên Entity Framework. Miễn là sự phụ thuộc đó là chấp nhận được, bạn tốt.

Nếu, mặt khác, bạn muốn tự xử lý khung thực thể như một phụ thuộc có khả năng được hoán đổi mà không thay đổi mã miền, thì bạn muốn tạo một trừu tượng như một trình bao bọc xung quanh đó.

Về cơ bản, tất cả đều đến nơi bạn vẽ đường kẻ là gì hoặc không phải là "phụ thuộc bên ngoài". Đối với một số dự án không quan trọng, đối với một số đó là cơ sở dữ liệu vật lý, đối với một số đó là khung truy cập dữ liệu, v.v.

+0

Tuyệt vời, đôi khi chúng ta nên sử dụng EntityTypeMapping để làm cho lớp rõ ràng. (Sử dụng FluentAPI). Sau đó chúng ta có thể sử dụng thực thể miền và không cần tham khảo EntityFramework – huoxudong125

7

Tại sao tôi nên xây dựng một mô hình kho với một đơn vị làm việc trên đầu của EF?

Do số Interface Segregation Principle.Các chữ ký của phương thức trong DbSetDbContext về cơ bản là một mớ hỗn độn ở mức độ thấp, có sự không phù hợp lớn giữa chúng và những gì thường được mong đợi trong một Kho lưu trữ và một Đơn vị công việc. Nói cách khác, nếu bạn sử dụng trực tiếp DbSetDbContext, mã Dịch vụ ứng dụng của bạn sẽ bị trừu tượng bị rò rỉ.

Trong lớp Ứng dụng, bạn cần thao tác ngữ nghĩa phù hợp. Mã trong lớp đó chỉ cần nói theo các giao dịch kinh doanh và lớn bộ sưu tập nơi bạn có thể tìm nạp và lưu trữ nội dung. Đây là những khái niệm trừu tượng tối giản, rất cao. Entity Framework lingo chỉ là quá mờ và cấp thấp cho điều đó, vì vậy bạn cần phải giới thiệu các thành ngữ khác - Repository và UoW.

+0

Tôi nghĩ đó là lý do thực sự. Nhưng đôi khi chúng ta không cần Repository và UoW, nếu dự án của chúng ta nhỏ hoặc đơn giản. chúng tôi có thể tham khảo trực tiếp DbContext. – huoxudong125

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