.net 创建自己的UoW/存储库与直接使用DbContext的区别

.net 创建自己的UoW/存储库与直接使用DbContext的区别,.net,repository,entity,dbcontext,.net,Repository,Entity,Dbcontext,DbContext的描述是:“DbContext实例表示工作单元和存储库模式的组合……”。但许多开发人员倾向于创建自己的存储库和UoW 我应该直接使用DbContext和DbSet,还是应该有自己的存储库?有什么区别 如果我们直接使用DbContext,有什么问题吗?如果我将来从MS SQL切换到Oracle,怎么样?接下来 其他时候,您可能需要编写自己的特定于应用程序的单元 一个工作接口或类,它从您的 持久性工具。你这样做可能有很多原因。你可以 要添加特定于应用程序的日志记录、跟踪或错误处理吗

DbContext
的描述是:“DbContext实例表示工作单元和存储库模式的组合……”。但许多开发人员倾向于创建自己的存储库和UoW

我应该直接使用
DbContext
DbSet
,还是应该有自己的存储库?有什么区别

如果我们直接使用
DbContext
,有什么问题吗?如果我将来从MS SQL切换到Oracle,怎么样?

接下来

其他时候,您可能需要编写自己的特定于应用程序的单元 一个工作接口或类,它从您的 持久性工具。你这样做可能有很多原因。你可以 要添加特定于应用程序的日志记录、跟踪或错误处理吗 到事务管理。也许您想封装 本文其余部分提供了持久性工具的详细信息 应用您可能需要这个额外的封装来简化它 稍后交换持久性技术。或者你可能想 提高系统的可测试性。许多内置的工作单元 来自通用持久性工具的实现很难处理 在自动化单元测试场景中使用

回到你的问题上来

我应该直接使用DbContext和DbSet,还是应该自己使用 存储库

事实上,将
DbContext
DbSet
放入存储库时没有问题。我们自己会问,我们希望测试更容易,而不是更难。如果我们想设计一个框架来测试所有东西,我们不应该直接在
存储库中使用
DbContext
DbSet
。我们应该使用接口
IDbContextFactory
,它用于提供
DbContext
,只要我的两分钱

<> P>帮助您对存储库有很多看法,您可以参考下面的链接来考虑存储库和<代码> DbValue之间的选项。

如果我们直接使用
DbContext
,有什么问题吗

不,如果直接使用
DbContext
,则没有问题。但它会使许多业务规则变得混乱,并会带来大量的扩展问题,如集中化数据库、难以测试以及违反设计原则中的独立关注点

如果我将来从MS SQL切换到Oracle,怎么样

实际上,将来在MS SQL和Oracle之间切换时没有问题。当使用实体框架的
DbContext
时,您只需按照下面的链接更改数据提供程序