我们的一位开发人员已经建立了一个新项目,而我现在正在做一些工作。我发现他做了存储库特有的事情。
我们正在使用实体框架,并且通常情况下,我们已经在Repository
类后面实现了IRepository
接口,因此可以将其模拟为单元测试。
他所做的是IRepository
上的各种方法,它们不会在Repository
本身上调用任何内容,而是将继承树调用到{{ 1}}。
所以DbContext
有:
IRepository
int SaveChanges();
就是这样构建的:
Repository
但它没有public class Repository : MyEntities, IRepository
方法。而是将调用传递回自动生成的SaveChanges
:
MyEntities
一直到public partial class MyEntities : DbContext
。
我已经处理了很多EF存储库层,而且我以前从未见过这样做过。我可以看到它的优点:它节省了大量的样板代码。但是我过去从未遇到过的事实让我感到不舒服:可能有一个很好的理由说明为什么这不是常见的做法。但我看不出任何不利之处。
所以:这是个好主意吗?如果没有,为什么不呢?
答案 0 :(得分:1)
我不确定你的同事想做什么,但这看起来不是一个好主意。因为他在Repository类中继承了MyEntities,所以MyEntities的所有方法都可以在Repository类中使用,这可能不是你真正想要的。
使用他的代码你可以写下:
var repo = new Repository();
repo.Database.ExecuteSqlCommand("truncate table your_important_table");