【问题标题】:Why does ObjectContext class not derive from some Interface?为什么 ObjectContext 类不是从某个接口派生的?
【发布时间】:2011-04-08 15:03:01
【问题描述】:

我认为 MS 的人比我聪明得多。我试图构建/测试一个几乎遵循this 方法的存储库,除了我想在存储库中松散地耦合 ObjectContext 依赖项。我发现为了解耦,我需要跳很多圈,如this 文章所示。即使这种方法也很难使用

  1. 您有来自现有数据库的 edmx
  2. 您有一个围绕 ObjectContext 接口和 IObjectSet 构建的通用存储库
  3. 在进行单元测试时,您希望伪造此对象上下文并将所有操作保留在内存中。考虑测试存储库。

现在真正的问题是,为什么 ObjectContext 的创建者决定不使用 IObjectContext ?

我希望我的问题是有道理的,如果有人能证明它没有并给我指路,我会很高兴。

提前致谢!

【问题讨论】:

  • 只想指出,由于在 EF4 中一切都基于从模板生成代码,因此很容易自定义模板以发出 ObjectContext 可以实现的接口。
  • 你的问题很有道理,但我担心这是 MS 的问题。
  • @Alex Paven:如果有任何具体的有用链接可以与我分享,我将不胜感激。
  • 其实,你甚至不需要修改模板——上下文是一个部分类,所以你需要做的就是添加到它:public partial class YourContext : IMyCustomInterface,你可以在 IMyCustomInterface 中放入任何签名您想从生成的 ObjectContext 中使用。或者您可以采用(通常)更推荐的方式,即进一步抽象到存储库中,例如 thedatafarm.com/blog/data-access/…(整个系列的帖子都很有趣,尽管可能有更好的实现)。
  • 其实,一个好的起点可能是这个:elegantcode.com/2009/12/15/…

标签: unit-testing mocking entity-framework-4 repository-pattern


【解决方案1】:

由于上下文是一个分部类,你可以很容易地在一个单独的文件中添加一个接口给它: public partial class YourContext : IMyCustomInterface,您可以在 IMyCustomInterface 中放入您想要从生成的 ObjectContext 中使用的任何签名。

或者您可以采用(通常)更推荐的方法,即比 ObjectContext 进一步抽象到存储库中,例如 this blog post(整个系列的帖子很有趣且相关)或 this one

【讨论】:

  • +1,特别是提醒我YourContextpartial :-)。
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多