Ruby Rain
Ruby Rain

Reputation: 165

How to add a parameterized DbContext to a Unit of work

I am trying to refactor my asp.net mvc + entity framework project to use repository pattern, and a unit of work. In the newest versions of asp.net mvc DbContext is creating automatically using a parameterized constructor, it looks like this:

public class SchoolContext : DbContext
{
    public SchoolContext(DbContextOptions<SchoolContext> options)
        : base(options)
    {
    }

    public DbSet<Student> Students { get; set; }
    public DbSet<Group> Groups { get; set; }
    public DbSet<Course> Courses { get; set; }

}

How can I create an instance of this DbContext in unitOfWork class, what options should I write it the brackets? P.S: I can't remove the parameters, cause they are used in program.cs in the next way

builder.Services.AddDbContext<SchoolContext>(options =>
   options.UseSqlServer(builder.Configuration.GetConnectionString("SchoolContext") ?? throw new InvalidOperationException("Connection string 'SchoolContext' not found.")));

And I also can't add an emty constuctor, cause it will cause an error due to the above statement. (you can't have both constructors)

Upvotes: 0

Views: 1014

Answers (1)

Ruby Rain
Ruby Rain

Reputation: 165

Thanks to the comments I figured it out, here what I was looking for: In the class create an instance of context

private SchoolContext _context;

And then initialize it using a constructor like this

public UnitOfWork()
    {
        var contextOptions = new DbContextOptionsBuilder<SchoolContext>()
            .UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Mentoring.Data;Trusted_Connection=True;MultipleActiveResultSets=true")
            .Options;
        _context = new SchoolContext(contextOptions);
    }

Upvotes: 1

Related Questions