0

こんにちは、エンティティ フレームワーク コアを使用して Web API(.net コア) に取り組んでいます。以下のようにコンテキストクラスを作成しました。

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; }
}

次に、以下のコードを使用して timesheetdata を追加しています。

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

したがって、2 つのエラーがあると思います。

1. タイムシートは名前空間ですが、タイプのように使用されます

TimeSheet クラスは、同じ text で終わる名前空間に存在すると思いますTimeSheet

DI でクラスを指定するときに、完全修飾クラスを使用 <namespace-name>.TimeSheetしてこのエラーを回避できます。

2. timesheetcontext.timesheetcontext(dbcontextoptions) の必須の仮パラメーター オプションに対応する引数がありません。

これは、DbContext オブジェクトを使用するために DI を使用していなかったために発生していました。

理想的には、次のように DbContext を使用する必要があります。

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

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

これが問題の解決に役立つことを願っています。

于 2020-01-22T15:03:50.867 に答える