【问题标题】:Entity Framework repository which calls functions on DbContext directly直接调用 DbContext 上的函数的实体框架存储库
【发布时间】:2015-06-08 10:20:57
【问题描述】:

我们的一位开发人员创建了一个新项目,我现在正在他不在的情况下进行一些工作。我发现他对存储库做了一些特别的事情。

我们正在使用实体框架,并且通常情况下,我们将它放在实现 IRepository 接口的 Repository 类后面,以便可以模拟它以进行单元测试。

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

所以IRepository 有:

int SaveChanges();

Repository 是这样构建的:

public class Repository : MyEntities, IRepository

但它没有SaveChanges 方法。而是将调用传递回自动生成的MyEntities

public partial class MyEntities : DbContext

一直到DbContext

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

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

【问题讨论】:

  • 这是一个糟糕的想法,一定会导致您的DbContext被滥用

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多