Entity Framework core 如何传递上下文对象?

Entitiframework core How to pass context object?

您好,我正在使用 entity framework 内核开发 Web api(.net core)。我创建了上下文 class 如下。

public class TimeSheetContext : DbContext
{
    public TimeSheetContext(DbContextOptions<TimeSheetContext> options)
        : base(options)
    {
    }
    public DbSet<Project> Projects { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<TimeSheetData> timeSheets { get; set; }
    public DbSet<Week> weeks { get; set; }
}

然后我使用下面的代码添加时间表数据。

public void SaveTimeSheet(TimeSheetData timeSheet)
{
    using (var context = new TimeSheetContext())
    {
        var std = context.timeSheets.Add(timeSheet);
        context.SaveChanges();
    }
}

using (var context = new TimeSheetContext()) 这里我遇到了以下错误。

there is no arguments corresponds to the required formal parameter options of timesheetcontext.timesheetcontext(dbcontextoptions)

我在启动时添加了以下代码。

services.AddDbContext<TimeSheetContext>(opt =>
              opt.UseSqlServer(Configuration.GetConnectionString("TimeSheet")));

然后我像下面这样使用。

public class TimeSheet : ITimesheet
{
    private readonly TimeSheetContext _context;
    public TimeSheet(TimeSheetContext context)
    {
        _context = context;
    }
    public TimeSheet GetTimeSheet(string userid, string weekid)
    {

        throw new NotImplementedException();
    }

    public void SaveTimeSheet(TimeSheetData timeSheet)
    {   
         var std = _context.timeSheets.Add(timeSheet);
        _context.SaveChanges();
    }
}

然后我尝试在启动时注册 TimeSheet 服务,如下所示。

services.AddTransient<ITimesheet, TimeSheet>();

现在我开始在时间表附近出现错误,

timesheet is a namespace but used like a type

谁能帮我找出这个错误。任何帮助将不胜感激。谢谢

所以,我认为你有两个错误。

1. timesheet 是一个命名空间,但使用方式类似于 type

我相信时间表 class 存在于以相同文本 TimeSheet.

结尾的命名空间中

在 DI 中指定 class 时,您可以使用完全限定的 class <namespace-name>.TimeSheet 以避免此错误。

2。没有参数对应于timesheetcontext.timesheetcontext(dbcontextoptions)

所需的形式参数选项

这是因为您没有使用 DI 来使用 DbContext 对象。

理想情况下,您应该按如下方式使用 DbContext:

namespace ContosoUniversity.Controllers
{
    public class TimeSheetController : Controller
    {
        private readonly TimeSheetContext _context;

        public TimeSheetController(TimeSheetContext context)
        {
            _context = context;
        }
    }
}

希望以上内容能帮助您解决问题。