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;
}
}
}
希望以上内容能帮助您解决问题。
您好,我正在使用 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;
}
}
}
希望以上内容能帮助您解决问题。