上下文在 EF 中起什么作用?

What role does the context in EF?

上下文在 EF 中起什么作用?我必须使用存储库模式吗? 因为根据我对上下文的理解,它已经是存储库。 这是商店的抽象还是我错了?

这个问题引起了激烈的争论,因此考虑以下 "an answer"。

EF 中的上下文是一个工作单元,其中 DbSet 是存储库。它们一起形成了对数据库的抽象。 SaveChanges 方法将提交对每个存储库所做的所有更改。

有很多示例,人们使用存储库模式创建内部使用 context/DbSet 的 IRepository。但这样做你是:

  • 在抽象之上创建抽象
  • 失去 EF 的功能,因为您的界面隐藏了实现

您创建此额外抽象的原因是您可以将 EF 换成其他东西,例如 database/storage。 但我相信 yagni 在这里就位。例如,如果您正在启动一个针对 SQL 数据库的项目,您的客户将更改为 Oracle 的几率有多大?

希望对您有所帮助。