Я пишу этот пост, потому что мне нужна помощь в моем приложении ASP.NET Core MVC. Я использую Entity Framework с идентификацией
Это класс dbcontext
. Настройки DbSet
предназначены только для тестирования. Здесь Identity должен автоматически создавать все таблицы, такие как AspNetUsers
, AspNetRoles
и т.д., Как это происходит с сервером Sql, который называется
Код Сначала, если я не ошибаюсь.
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 на платформе Google Cloud, поэтому код имеет .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();
}
Надеюсь, я правильно объяснил, и я предложил все необходимые классы для решения проблемы.
В вашем классе ApplicationDbContext
убедитесь, что вы добавили весь необходимый класс в качестве общедоступного свойства, такого как Таблица Settings
.
public DbSet<PeopleDataModel> People { get; set; }
После этого вам нужно запустить команду Add-Migration AddPeople
, которая создаст новый класс миграции с новыми изменениями, а затем запустите команду " Update-Database
чтобы применить ожидающие миграции в базе данных.