尝试使用实体框架和mysql创建代码优先的项目。
当我使用 context.Database.EnsureCreated();
表的创建是正确的,但我希望使用迁移,以便代码更改为: context.Database.Migrate();
这时我得到了一个错误:
mysqlexception:表“library.publisher”不存在
我确实看到数据库已创建,并且有一个空表: __efmigrationshistory
但这是唯一的表,没有出版商会像它那样重新创建。
我错过了什么?
下面是再现错误的最小代码:
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
现在初始值显示:
system.missingmethodexception:找不到方法:“void microsoft.entityframeworkcore.storage.internal.relationalcommandbuilderfactory..ctor(microsoft.entityframeworkcore.diagnostics.idiagnosticslogger'1,microsoft.entityframeworkcore.storage.irelationaltypemapper)”。位于mysql.data.entityframeworkcore.storage.internal.mysqlcommandbuilderfactory..ctor(idiagnosticslogger'1 logger,irelationaltypemapper typemapper)
1条答案
按热度按时间uqjltbpv1#
我也有同样的问题。来自@helder sepulveda的评论解决了我的问题。我遵循的步骤:
打开包管理器控制台。
Enable-Migrations
Add-Migration InitialCreate
(或者随便你叫什么名字。)Update-Database
然后在mysql数据库中创建这些表。