问题描述
我对 EF Core 有点陌生,想知道为 DbSet 创建扩展方法是否是对它的误用。
我的代码库中有很多长查询,我认为这些查询会从扩展方法中受益(从可维护性角度来说)。
对我来说,这个
var appUseRSSegments = dbContext.ApplicationUseRSSegments
.Where(a => a.App.AppId == selectedApp.AppId)
.OrderBy(a => a.CreatedDate)
.ToList();
很容易
var appId = 232;
var appUseRSSegments = dbContext.ApplicationUseRSSegments.FindRecent(appId);
有什么我不知道的关于 DbSet 或 EF Core 的东西比创建扩展方法更好吗?
解决方法
您可能不应该这样做,因为从长远来看会更难维护。
它还使开发人员能够编写糟糕的代码。
比如,直接从任何地方调用 DbContext 使用扩展方法,同时说它是没有任何抽象的代码重用。
最佳实践是实现一个服务,无论是使用 repository pattern 还是 CQRS pattern,它都抽象了 DbContext 的用法,并在其中包含这段代码而不是扩展。
然后为了可重用性,您可以调用服务来执行您的代码而不是扩展。
这将使您能够控制这些片段中的依赖项,并且您将能够以更简单的方式使用依赖项注入来切换实现。