.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
时,您只需按照下面的链接更改数据提供程序
或