实现存储库模式

本文关键字:模式 存储 实现 | 更新日期: 2023-09-27 18:31:26

根据 asp.net 上的本教程,它显示了以下代码:

using System;
using ContosoUniversity.Models;
namespace ContosoUniversity.DAL
{
    public class UnitOfWork : IDisposable
    {
        private SchoolContext context = new SchoolContext();
        private GenericRepository<Department> departmentRepository;
        private GenericRepository<Course> courseRepository;
        public GenericRepository<Department> DepartmentRepository
        {
            get
            {
                if (this.departmentRepository == null)
                {
                    this.departmentRepository = new GenericRepository<Department>(context);
                }
                return departmentRepository;
            }
        }
        public GenericRepository<Course> CourseRepository
        {
            get
            {
                if (this.courseRepository == null)
                {
                    this.courseRepository = new GenericRepository<Course>(context);
                }
                return courseRepository;
            }
        }
        public void Save()
        {
            context.SaveChanges();
        }
        private bool disposed = false;
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    context.Dispose();
                }
            }
            this.disposed = true;
        }
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }
}

是否每次要添加新数据库表时都必须编写代码? 例如,如果我想添加一个学生存储库,我必须这样做(?):

private GenericRepository<Student> studentRepository;
public GenericRepository<Student> StudentRepository
{
    get
    {
        if (this.studentRepository == null)
        {
            this.studentRepository = new GenericRepository<Student>(context);
        }
        return studentRepository;
    }
}

如果我的数据库有 50 个表怎么办? 我必须为所有 50 个编写此代码吗!?

实现存储库模式

您的问题的答案是"是",工作单元应包含访问所有可能存储库的属性。

如果编写代码时遇到麻烦,请创建一个 T4 模板并让该类自动生成。