I'm writing this post because I need help with my ASP.NET Core MVC application. I'm using Entity Framework with Identity
This is the dbcontext class. The Settings DbSet is only for testing. Here Identity must create automatically all the tables such as AspNetUsers, AspNetRoles, etc as it does with a Sql Server, that is called
Code First if I am not wrong.
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<SettingsDataModel> Settings { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Fluent API
modelBuilder.Entity<SettingsDataModel>().HasIndex(a => a.Name);
}
}
So, there I create the database class, the ASP.NET app inits the database here:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySQL(IoCContainer.Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
In the Startup class. Note I'm using MySql because I will host the application in an App Engine on Google Cloud Platform, that is why the code has .UseMySQL.
And in the HomeController is where I execute EnsureCreated method.
protected ApplicationDbContext mContext;
protected UserManager<ApplicationUser> mUserManager;
protected SignInManager<ApplicationUser> mSignInManager;
public HomeController(
ApplicationDbContext context,
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager)
{
mContext = context;
mUserManager = userManager;
mSignInManager = signInManager;
}
public IActionResult Index()
{
mContext.Database.EnsureCreated(); //<-- It returns false
if (!mContext.Settings.Any()) //<-- Here it throws an exception saying that the database no exists
{
mContext.Settings.Add(new SettingsDataModel
{
Name = "BackgroundColor",
Value = "Red"
});
mContext.SaveChanges();
}
return View();
}
I hope I explained correctly and I provided all needed classes to solve the problem.
Update-Databaseto apply pending migrations to the database