我正在构建ASP.NET MVC 5应用程序。
我读到了存储库和工作单元(UoW)模式here。
这些示例使用Entity Framework,它本身添加了高级抽象。
我使用的是ADO.NET而不是EF。我想知道:
答案 0 :(得分:5)
我编写了一个blog post,它教你如何编写与驱动程序无关的代码,以及如何使用普通的ADO.NET实现Uow / Repository模式。
在这个答案中包含它有点太长了,但基本上IDbtransaction
代表你的单位工作(或包含在一个工作中),每个存储库都会在它的构造函数中使用事务或UoW。
使用IDbTransaction
using (var cmd = transaction.Connection.CreateCommand())
{
cmd.Transaction = transaction;
//do a CRUD operation here.
}
答案 1 :(得分:1)
using
陈述。 using (SqlConnection con = new SqlConnection(//connection string)
{
using (SqlCommand cmd = new SqlCommand(storedProcname, con))
{
//...
}
}
当您使用using
语句来涵盖您的工作单元时,您可以放心,SqlConnection.Dispose()
方法会调用SqlConnection.Close()
方法和SqlCommand.Dispose()
来电SqlCommand.Close()
。
答案 2 :(得分:1)
如果您查看模式的definitions以及支持它们所需的模式,您会看到,如果您自己开始实施这些模式,那么您将永远不会徘徊从创建自己的ORM。虽然这是一项非常有趣的任务,但在考虑NHibernate和EntityFramework时,它永远不值得。
然而,为了回答你的问题,我发现Fowler的PoEAA书在学习如何编写我自己的UoW,DataMappers和Repositories方面非常宝贵,所有这些都基于ADO.Net。它是由一个显然是真实地完成它的人写的,犯了所有错误然后记录下来,以便你不必这样做。我还没有阅读你所链接的文章,但是我经常担心使用这样的文章,因为它们只是表现出对这种模式的表面层面的考虑。
答案 3 :(得分:1)
前段时间我写了blog post为什么你所链接的教程是有害的。 tldr;存储库使用实现UoW的DAO,但存储库不应该是UoW的一部分。除非你想使代码库/生活复杂化。
回答你的问题:
saa很多人滥用了存储库模式,我建议阅读我的"Repository for dummies"帖子,以了解这是一个非常简单的模式,与您复杂的例子无关。经常看到。