首页 > 解决方案 > 使用 MySQL 的 Code First 不会创建表

问题描述

尝试使用实体框架和 MySQL 创建代码优先项目。
当我使用context.Database.EnsureCreated();表时创建正确,但我想使用迁移,因此代码更改为:context.Database.Migrate();那就是我收到错误的时候:

MySqlException:表'library.publishers'不存在

我确实看到数据库已创建并且有一个空表:__efmigrationshistory但这是唯一的表,没有发布者像它对 EnsureCreated 所做的那样。

我在这里想念什么?

这是重现错误的最小代码:

using Microsoft.EntityFrameworkCore;

namespace mySqlEFcore
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new LibraryContext())
            {
                context.Database.Migrate();
                context.Publishers.Add(new Publisher { ID = 1 });
                context.SaveChanges();
            }
        }

        private class Publisher
        {
            public int ID { get; set; }
        }

        private class LibraryContext : DbContext
        {
            public DbSet<Publisher> Publishers { get; set; }

            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                optionsBuilder.UseMySQL("server=localhost;database=library;user=root;password=123456;SslMode=none;");
            }

            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Entity<Publisher>(entity => { entity.HasKey(e => e.ID); });
            }
        }
    }
}

尝试运行Add-Migration InitialCreate但遇到更多错误...
添加了参考Microsoft.EntityFrameworkCore.Design,现在 InitialCreate 显示:

System.MissingMethodException:找不到方法:'无效 Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory..ctor(Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger'1,Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMapper)'。在 MySql.Data.EntityFrameworkCore.Storage.Internal.MySQLCommandBuilderFactory..ctor(IDiagnosticsLogger'1 记录器,IRelationalTypeMapper typeMapper)

标签: c#mysqlentity-framework.net-core

解决方案


我遇到过同样的问题。@Helder Sepulveda 的评论解决了我的问题。我遵循的步骤:

  1. 打开包管理器控制台
  2. Enable-Migrations
  3. Add-Migration InitialCreate或任何你想要的名字。
  4. Update-Database

然后在我的 MySQL 数据库中创建了这些表。


推荐阅读