存储库模式linq到sql(存储过程)

时间:2010-02-17 16:27:48

标签: repository

我正在寻找可以从中学习的存储库模式示例,我已经阅读了很多博客,似乎每个人都有自己的意见 - 实现存储库模式 -

任何帮助?

谢谢,

2 个答案:

答案 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类型的范围,在您手动编码的新类型中复制所有数据。但那么你如何处理一对多和多对多的关系呢?将它全部加载到内存中,或逐个加载,确保您失去了对数据库进行有效查询的任何方法?

整个过度的事情令人沮丧。能够隐藏你实际上并没有将数据存储在数据库中的事实会很棒,但除非你很幸运(即你的设计很简单),否则你将无法逃脱用它。