实体框架存储库直接调用DbContext上的函数

时间:2015-06-08 10:20:58

标签: c# entity-framework repository repository-pattern

我们的一位开发人员已经建立了一个新项目,而我现在正在做一些工作。我发现他做了存储库特有的事情。

我们正在使用实体框架,并且通常情况下,我们已经在Repository类后面实现了IRepository接口,因此可以将其模拟为单元测试。

他所做的是IRepository上的各种方法,它们不会在Repository本身上调用任何内容,而是将继承树调用到{{ 1}}。

所以DbContext有:

IRepository

int SaveChanges(); 就是这样构建的:

Repository

但它没有public class Repository : MyEntities, IRepository 方法。而是将调用传递回自动生成的SaveChanges

MyEntities

一直到public partial class MyEntities : DbContext

我已经处理了很多EF存储库层,而且我以前从未见过这样做过。我可以看到它的优点:它节省了大量的样板代码。但是我过去从未遇到过的事实让我感到不舒服:可能有一个很好的理由说明为什么这不是常见的做法。但我看不出任何不利之处。

所以:这是个好主意吗?如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:1)

我不确定你的同事想做什么,但这看起来不是一个好主意。因为他在Repository类中继承了MyEntities,所以MyEntities的所有方法都可以在Repository类中使用,这可能不是你真正想要的。

使用他的代码你可以写下:

var repo = new Repository();
repo.Database.ExecuteSqlCommand("truncate table your_important_table");