今天我想实现数据库连接的存储库模式+工作单元模式。我的代码波纹管正确吗?因为这是我第一个实现数据库连接的工作单元。
第一个存储库:
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 方法,将数据提交到数据库。