Автоматическое создание таблиц (сначала код) с использованием Entity Framework WITH MYSQL

0

Я пишу этот пост, потому что мне нужна помощь в моем приложении 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();
    }

Надеюсь, я правильно объяснил, и я предложил все необходимые классы для решения проблемы.

  • 0
    Вы запускали команду обновления базы данных?
  • 0
    @WaelAbbas О какой команде ты говоришь?
Показать ещё 6 комментариев
Теги:

1 ответ

0
Лучший ответ

В вашем классе ApplicationDbContext убедитесь, что вы добавили весь необходимый класс в качестве общедоступного свойства, такого как Таблица Settings.

public DbSet<PeopleDataModel> People { get; set; }

После этого вам нужно запустить команду Add-Migration AddPeople, которая создаст новый класс миграции с новыми изменениями, а затем запустите команду " Update-Database чтобы применить ожидающие миграции в базе данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню