EntityFramework - 在静态类中使用项目上下文

问题描述 投票:0回答:1

我已经开始使用 EntityFramework 并创建了一个用户模型。 我想要一个自定义静态类,用于存储用户的相关功能,我想知道什么是最佳实践。 我试着阅读了一下,发现了几个选择:

  1. 创建静态类并将项目上下文作为参数传递给每个函数:
internal static User? Get(ProjectContext context, uint id) =>
        context.Get<User>(i => i.Id == id);
  1. 将用户类创建为非静态类并在构造函数中传递上下文:
private ProjectContext _context;
internal Users(ProjectContext context) =>
        _context = context;
  1. 直接将函数添加到上下文的类中(但是当我有很多模型时,这会使类变得非常繁重)
  2. 在函数中初始化一个新的上下文对象:
internal static User? Get(uint id) =>
        new ProjectContext().Get<User>(i => i.Id == id);

处理这个问题的最佳方法是什么? 我相信最好的方法也可以是与我列出的不同的选择,我很乐意听到。

谢谢, 不。

我已经尝试了下面列出的选项并且它们有效,但我想知道最佳实践方法。

c# entity-framework entity-framework-core
1个回答
0
投票

现代 .NET 中最惯用的方法是使用 依赖注入,所以如果您要开始一个新的相对较大的项目,最好的方法是第二种方法,因为它可以使用 DI。它可以与第一个结合使用,但我建议使用扩展方法

internal static UserExts
{
     internal static User? GetUser(this ProjectContext context, uint id) =>
        context.Get<User>(i => i.Id == id);
}

这允许像

_ctx.GetUser(1)
;

这样的用法

对于测试/丢弃项目,任何需要较少仪式的方法都可以。

我还建议研究不同的设计/架构模式,这将使您能够为您的案例做出更合适的选择(例如,有一些 Microsoft 指南)。

© www.soinside.com 2019 - 2024. All rights reserved.