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

本文关键字:DbContext 调用 函数 框架 存储 实体 | 更新日期: 2023-09-27 17:54:04

我们的一个开发人员建立了一个新项目,我现在正在他不在的时候做一些工作。我发现他对仓库做了一些奇怪的事情。

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

他所做的是在IRepository上放置各种方法,这些方法不调用Repository本身的任何内容,而是向下调用继承树到DbContext

所以IRepository有:

int SaveChanges();

Repository是这样构建的:

public class Repository : MyEntities, IRepository

但是它没有SaveChanges方法。相反,调用被传递回自动生成的MyEntities:

public partial class MyEntities : DbContext

DbContext

我在很多EF存储库层上工作过,但我以前从未见过这样做。我可以看到这样做的好处:它节省了大量的样板代码。但事实上,我过去从未遇到过这种情况,这让我感到不舒服:这可能是一个很好的理由,为什么这种做法不常见。但我看不出有什么缺点。

那么:这是个好主意吗?如果不是,为什么不呢?

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

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

用他的代码你可以这样写:

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