Câu hỏi của bạn không ngu ngốc! Bắt đầu với UnitOfWork
và các mẫu Repository
mất một chút thời gian.
Trước tiên, để có được một số quyền hạn. A UnitOfWork
đóng gói một tập hợp các hành động và nhóm chúng lại với nhau. Vì vậy, bạn có thể ví dụ như tạo ra một khách hàng, một sản phẩm và một thứ tự tương ứng trong một nhóm hợp lý.
A Repository
cung cấp cho bạn một điểm truy cập duy nhất vào các thực thể và phần lớn thời gian có một số phương pháp cụ thể để truy xuất dữ liệu.
Nhiều kho lưu trữ có thể được sử dụng trong một giao dịch duy nhất, đó là lý do tại sao chúng chia sẻ UnitOfWork
.
Trong ví dụ bạn đã đăng, các tệp T4 tạo ra một số giao diện Repository
. Một là chỉ đọc với các phương thức để chọn các thực thể nhưng các phương thức khác Repository
có các phương thức như Add
và Delete
. Vì vậy, nếu bạn muốn thêm một thực thể, trước tiên bạn cần xây dựng một UnitOfWork
và sau đó tạo nhanh Repository
cho loại thực thể bạn đang làm việc với (CustomerRepository
hoặc ProductRepository
chẳng hạn). Sau đó, bạn có thể sử dụng phương thức Add
để thêm đối tượng vào một số Repository
. Khi bạn làm việc xong với kho lưu trữ của mình, bạn sẽ gọi số UnitOfWork.Commit()
để lưu các thay đổi của mình vào cơ sở dữ liệu.
IUnitOfWork unitOfWork = new EFUnitOfWork();
IRepository<Customer> customerRepository = new CustomerEFRepository(unitOfWork);
Customer c = new Customer();
// init customer
customerRepository.Add(c);
unitOfWork.Commit();
Trong ví dụ bạn đã đăng, Dependency Injection with StructureMap được sử dụng. Đây là một chủ đề hoàn toàn khác, nhưng điều đó có nghĩa là bạn không xây dựng trực tiếp số UnitOfWork
và Repository
nhưng chúng được 'tiêm' vào mã của bạn bằng cách sử dụng một số cấu hình bạn đã thiết lập.
Nguồn
2012-01-04 15:33:04
Tôi đã làm việc trên mẫu C# Repo/Unit of Work của riêng mình trong một thời gian và tôi đã luôn tự hỏi liệu nó có đúng hay không. Đây chính xác là cách tôi đã thực hiện nó bằng cách sử dụng Ninject tiêm uow và kho lưu trữ vào bộ điều khiển mvc. Đơn vị làm việc của tôi giữ một bản sao của lớp DbContext được chia sẻ với repos.Thought bạn giải thích nó tốt :-) –