具有 MVC 应用程序中数据库的工作单元模式的存储库



今天我想实现数据库连接的存储库模式+工作单元模式。我的代码波纹管正确吗?因为这是我第一个实现数据库连接的工作单元。

第一个存储库:

public class NotesRepository : INotesRepository
{
    private DatabaseContext context;
    public NotesRepository(DatabaseContext context)
    {
        this.context = context;
    }
    public IQueryable<Notes> GetAllNotes()
    {
        return (from x in context.Notes
                select x);
    }
}

第二个存储库:

public class CommentsRepository : ICommentsRepository
{
    private DatabaseContext context;
    public CommentsRepository(DatabaseContext context)
    {
        this.context = context;
    }
    public IQueryable<Comments> GetAllComments()
    {
        return (from x in context.Comments
                select x);
    }
}

数据库连接的工作类单元:

public class UnitOfWork
{
    private DatabaseContext context = new DatabaseContext();
    private INotesRepository notesRepository;
    private ICommentsRepository commentsRepository;
    public INotesRepository NotesRepository
    {
        get
        {
            if (this.notesRepository == null)
            {
                this.notesRepository = new NotesRepository(context);
            }
            return notesRepository;
        }
    }
    public ICommentsRepository CommentsRepository
    {
        get
        {
            if (this.commentsRepository == null)
            {
                this.commentsRepository = new CommentsRepository(context);
            }
            return commentsRepository;
        }
    }
}

和控制器,我可以在其中使用具有单个数据库连接的多个存储库:

public class HomeController : Controller
    {
        private UnitOfWork unitOfWork = new UnitOfWork();        
        public ViewResult Index()
        {
            var a = unitOfWork.NotesRepository.GetAllNotes();
            var b = unitOfWork.CommentsRepository.GetAllComments();
            return View();
        }
    }

你的实现非常正确:)

但我建议你使用 IUnitOfWork 接口并在构造函数中传递 DatabaseContext 实例。

要做的另一件事是在 UnitOfWork 中创建一个 SaveChanges 方法,将数据提交到数据库。

相关内容

最新更新