Entitiframework core Как передать объект контекста? - PullRequest
0 голосов
/ 22 января 2020

Привет, я работаю над web api (. net core) с ядром Entity Framework. Я создал контекстный класс, как показано ниже.

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 является пространством имен, но используется как тип

Может кто-нибудь помочь мне найти эту ошибку. Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 22 января 2020

Итак, я считаю, что у вас есть две ошибки.

1. расписание является пространством имен, но используется как тип

Я считаю, что класс 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;
        }
    }
}

Надеюсь, это поможет вам решить проблемы.

...