我写这篇文章是因为我需要帮助我的ASP.NET Core MVC应用程序。我正在使用带有身份的实体框架
这是dbcontext
类。设置DbSet
仅用于测试。这里Identity必须自动创建所有表,例如AspNetUsers
,AspNetRoles
等,就像它对Sql Server一样,称为
代码优先如果我没有错。
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);
}
}
所以,我在这里创建数据库类,ASP.NET应用程序在数据库中:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySQL(IoCContainer.Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
在 Startup 类中。注意我使用MySql是因为我将在Google云端平台上的App Engine中托管应用程序,这就是代码 .UseMySQL 的原因。
在HomeController
我执行 EnsureCreated 方法。
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();
}
我希望我能正确解释,并提供了解决问题所需的所有课程。
答案 0 :(得分:1)
在ApplicationDbContext
课程中,请确保将所有需要的课程添加为公共属性,例如Settings
表格。
public DbSet<PeopleDataModel> People { get; set; }
之后,您需要运行Add-Migration AddPeople
命令,该命令将使用新更改创建新的迁移类,然后运行Update-Database
命令将挂起的迁移应用于数据库。