我正在寻找可以从中学习的存储库模式示例,我已经阅读了很多博客,似乎每个人都有自己的意见 - 实现存储库模式 -
任何帮助?
谢谢,
答案 0 :(得分:2)
答案 1 :(得分:1)
存储库模式与Linq to Sql不匹配。抱歉。
恕我直言,几乎所有的I-hide-data-storage-from-u模式都以这种或那种方式被打破。要么泄漏抽象,要么需要大量冗余代码。想象一下......你有一个IRepository,它使用Linq to Sql生成一个与Foo数据库表匹配的Foo类型。真棒!一切都比我预期的更好。
除了Foo表链接到Bar表。所以现在当你通过IR的IRepository接口返回所有Foos时,你必须保持你的DataContext活着,这样如果有人去foreach(var bar in Foo.Bars)
他们会得到他们期望的。
但是你如何管理DataContext?你是为一个IRepository的所有实例保留一个还是每个实例一个?创建一个Bar,添加一个新的Foo并保存到IRepository会发生什么?你添加了一个没有Foo存储库的Foo!它会变得更糟,因为没有正确使用L2S模式的副作用会从你的IRepository中逐渐消失。
因此,您尝试在您的IRepository实现中确定L2S类型的范围,在您手动编码的新类型中复制所有数据。但那么你如何处理一对多和多对多的关系呢?将它全部加载到内存中,或逐个加载,确保您失去了对数据库进行有效查询的任何方法?
整个过度的事情令人沮丧。能够隐藏你实际上并没有将数据存储在数据库中的事实会很棒,但除非你很幸运(即你的设计很简单),否则你将无法逃脱用它。