I have .Net Core app and want to setup IoC/DI for DbContext with .Net Core Identity:
public class DataContext : IdentityDbContext<User, IdentityRole<int>, int, IdentityUserClaim<int>, IdentityUserRole<int>, IdentityUserLogin<int>, IdentityRoleClaim<int>, IdentityUserToken<int>>, IDataContext
{
private readonly string _dbName;
public DataContext(string dbName)
{
this._dbName = dbName;
}
public virtual DbSet<Container> Containers { get; set; }
public virtual DbSet<Note> Notes { get; set; }
public virtual DbSet<Post> Posts { get; set; }
public virtual DbSet<Email> Emails { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConnectionStrings.DataContext.Replace(":dbname", this._dbName));
base.OnConfiguring(optionsBuilder);
}
}
Interface:
public interface IDataContext
{
DbSet<Container> Containers { get; set; }
DbSet<Note> Notes { get; set; }
DbSet<Post> Posts { get; set; }
DbSet<Email> Emails { get; set; }
}
In Startup.cs I have the follwoing line:
services.AddDbContext<DataContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DataContext")));
But that connection string doesn't contain db name.
Should I include into interface such tables as: AspNetUsers, AspNetRoles, ...?
And I want to write in Startup.cs something like that:
services.AddScoped<IDataContext, DataContext>();
And use interface everywhere instead the whole class.
Can I do that? And how can I do that?