存储库模式

时间:2010-08-07 16:10:55

标签: repository-pattern

我有一个关于存储库使用的快速问题。但问最好的方法是显示一些伪代码,你们告诉我结果应该是什么

  • 从ID为1的存储库中获取记录(假设它存在)

  • 编辑一些属性

  • 再次查询存储库,查找ID为1

  • 的项目
  • 结果= ??

我是否应该获取具有更新值的对象或没有(原始状态)的对象,请记住,因为更新属性值(步骤2),我没有告诉存储库更新此记录。

我想我应该得到原始项目的副本,而不是对编辑版本的引用。

请告诉我什么是正确的。

干杯

2 个答案:

答案 0 :(得分:2)

存储库模式假设像对象的集合一样,所以理想情况下我认为它应该返回相同的对象实例,其中包含更新。

通常在某处有一个身份地图,因此您的存储库可以跟踪已经加载的内容。使用标识映射,当您获取具有相同Id的对象时,无论多少次,您都应始终获取已加载的对象。这就是所有更复杂的ORM的工作方式,通常也是一种很好的做法。身份映射有助于在您处于同一事务时保持同步,并为您节省一些数据访问权。

NHibernate的会话有一个它跟踪的身份映射,因此您不必担心尝试在您的存储库中实现自己的身份映射。另外我相信你可以使用NHibernate的无状态会话,如果你想加载另一个没有改变跟踪的实例,但我对此并不乐观。

答案 1 :(得分:0)

从你过去的问题来看,我假设你正在使用LINQ / C#?

如果您使用的是DataContext且尚未调用SubmitChanges(),那么您应该取回原始未更改的对象。

刚试过它。我错了,你找回了改变的对象 如果您在ObjectTrackingEnabled = false上设置DataContext,则会获得未更改的对象。