使用带有MYSQL的实体框架自动创建表(代码优先)

时间:2018-04-13 20:39:44

标签: c# mysql asp.net

我写这篇文章是因为我需要帮助我的ASP.NET Core MVC应用程序。我正在使用带有身份的实体框架

这是dbcontext类。设置DbSet仅用于测试。这里Identity必须自动创建所有表,例如AspNetUsersAspNetRoles等,就像它对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();
    }

我希望我能正确解释,并提供了解决问题所需的所有课程。

1 个答案:

答案 0 :(得分:1)

ApplicationDbContext课程中,请确保将所有需要的课程添加为公共属性,例如Settings表格。

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

之后,您需要运行Add-Migration AddPeople命令,该命令将使用新更改创建新的迁移类,然后运行Update-Database命令将挂起的迁移应用于数据库。