0

嗨,我正在使用实体框架核心开发 web api(.net core)。我创建了如下上下文类。

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())在这里,我遇到了错误。

没有参数对应于 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 是一个命名空间,但用作类型

有人可以帮我找到这个错误。任何帮助将不胜感激。谢谢

4

1 回答 1

0

所以,我相信你有两个错误。

1. timesheet 是一个命名空间,但用作类型

我相信 TimeSheet 类存在于以相同文本结尾的命名空间中TimeSheet

在 DI 中指定您的类时,您可以使用完全限定的类 <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;
        }
    }
}

我希望这可以帮助您解决问题。

于 2020-01-22T15:03:50.867 回答