存储库使用UnitOfWork模式为MVC应用程序中的数据库

时间:2012-12-09 08:12:59

标签: asp.net-mvc design-patterns unit-of-work

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

第一个存储库:

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

1 个答案:

答案 0 :(得分:1)

您的实施非常正确:)

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

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