You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从另一个类引用DB Context类?附Code First生成的Users类代码

如何从另一个类引用DB Context类

嘿,我来帮你搞定这个问题!首先得确认:你用Code First from Database逆向工程生成Users类的时候,应该同时生成了一个继承自DbContext的类(比如默认会叫BookingsContext或者和你的项目/数据库同名),它负责和数据库交互,里面会包含DbSet<Users> Users这样的属性,大概长这样:

namespace BookingsModel
{
    public class BookingsContext : DbContext
    {
        public BookingsContext() : base("name=BookingsContext")
        {
        }

        public virtual DbSet<Users> Users { get; set; }
        // 其他实体对应的DbSet也会在这里
    }
}

接下来给你分享几种常用的引用方式,按需选择:

1. 直接实例化(快速简单,适合小项目)

如果是小型工具类或者快速验证功能,直接在目标类里创建Context实例就行,记得用using语句自动释放资源,避免内存泄漏:

using BookingsModel; // 先引入Context所在的命名空间

public class UserService
{
    public Users GetUserById(int userId)
    {
        using (var context = new BookingsContext())
        {
            return context.Users.Find(userId);
        }
    }
}

2. 依赖注入(推荐中大型项目,优雅又好维护)

这是现在主流的方式,尤其是在ASP.NET Core这类框架里,原生支持,还方便做单元测试。分两步走:

第一步:把Context注册到服务容器

在启动类(比如ASP.NET Core的Program.cs)里添加注册代码,这里以SqlServer为例,你可以根据自己的数据库类型调整:

using BookingsModel;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 注册DbContext,读取配置文件里的连接字符串
builder.Services.AddDbContext<BookingsContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("BookingsContext")));

第二步:在目标类里通过构造函数注入

直接在类的构造函数里声明需要的Context,框架会自动帮你实例化并传入:

using BookingsModel;

public class UserService
{
    private readonly BookingsContext _context;

    // 构造函数注入Context
    public UserService(BookingsContext context)
    {
        _context = context;
    }

    public List<Users> GetAllUsers()
    {
        return _context.Users.ToList();
    }
}

3. 静态辅助类(不推荐,仅临时应急)

如果你暂时不想搞依赖注入,又想少写点重复代码,可以整个静态类封装Context,但要注意这种方式有线程安全问题,高并发场景别用:

using BookingsModel;

public static class DbContextHelper
{
    private static readonly BookingsContext _context = new BookingsContext();

    public static BookingsContext GetContext()
    {
        return _context;
    }
}

// 其他类里这么用
public class UserManager
{
    public void AddNewUser(Users newUser)
    {
        var context = DbContextHelper.GetContext();
        context.Users.Add(newUser);
        context.SaveChanges();
    }
}

最后提几个注意点

  • 确保连接字符串配置正确:ASP.NET Core看appsettings.json,传统.NET Framework看App.config/Web.config。
  • 能用依赖注入就尽量用,代码更灵活,也好测试。
  • 直接实例化的时候一定要用using,不然容易占着数据库连接不释放。

内容的提问来源于stack exchange,提问作者OverdueOrange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:15:58