3

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

第一个存储库:

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();
        }
    }
4

1 回答 1

1

您的实现非常正确:)

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

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

于 2012-12-09T09:54:36.263 回答