You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Core数据库脚本生成异常问题求助

Entity Framework无法创建和更新数据库架构问题

问题详情

仅创建了InitialMigration迁移,其.Designer.cs文件与ModelSnapshot内容一致。执行dotnet ef database update InitialMigration命令后提示成功,但数据库中仅存在__EFMigrationsHistory表;运行dotnet ef migrations script时,输出仅包含该历史表的创建、事务及迁移记录插入脚本:

CREATE TABLE IF NOT EXISTS `__EFMigrationsHistory`(`MigrationId`varchar(150) CHARACTER SET utf8mb4 NOT NULL,`ProductVersion`varchar(32) CHARACTER SET utf8mb4 NOT NULL, CONSTRAINT`PK___EFMigrationsHistory` PRIMARY KEY (`MigrationId`)
) CHARACTER SET=utf8mb4;

START TRANSACTION;

INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('20231119014754_InitialMigration', '7.0.10');

COMMIT;

通过IEntityTypeConfiguration接口从程序集加载配置,AppDbContext代码如下:

public DbSet<Player> Players { get; set; } = null!;
public DbSet<Organization> Organizations { get; set; } = null!;
public DbSet<Court> Courts { get; set; } = null!;
public DbSet<OutboxMessage> OutboxMessages { get; set; } = null!;

 public ApplicationDbContext() 
{
}

public ApplicationDbContext(
    DbContextOptions<ApplicationDbContext> options) 
    : base(options)
{
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    string? connstring =
        "Host=dbaas-db-5110007-do-user-14547597-0.b.db.ondigitalocean.com; Port=25060; Database=defaultdb; Username=doadmin; Password=AVNS_9l1PkdtBRCQAEm1WbOu;";
    
    if (!optionsBuilder.IsConfigured)
    {
        optionsBuilder.UseMySql(connstring,
            new MySqlServerVersion(new Version(8,  0)), mysql =>
            {
                mysql.EnableRetryOnFailure();
            });
        optionsBuilder.EnableDetailedErrors();
        optionsBuilder.EnableSensitiveDataLogging();
    }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}

排查与解决

1. 检查实体配置加载情况

  • 确认所有实现IEntityTypeConfiguration的配置类是public访问级别,且与AppDbContext位于同一程序集内。如果配置类是internal,EF无法扫描到。
  • 执行dotnet ef migrations add InitialMigration -v(添加-v查看详细日志),查看日志中是否有加载实体配置的记录,确认EF识别到了所有DbSet对应的实体。

2. 重新生成迁移文件

  • 删除现有迁移文件夹(包含InitialMigration的目录)和ModelSnapshot.cs文件。
  • 重新执行dotnet ef migrations add InitialMigration,查看生成的迁移文件中是否包含实体表的创建语句。如果新迁移文件仍无实体表代码,说明EF未识别到实体模型,需检查实体类是否符合EF的映射规则(如有无主键、属性类型是否支持等)。

3. 验证上下文配置

  • 确认OnConfiguring中的连接字符串正确,目标数据库已存在,且数据库服务可正常访问。
  • 如果项目使用依赖注入,确保AppDbContext是通过带DbContextOptions参数的构造函数初始化,而非无参构造函数,避免配置加载异常。

4. 版本兼容性检查

  • 确认EF Core 7.0.10与MySQL 8.0的版本兼容性,可尝试升级EF Core到最新稳定版,或使用匹配版本的MySQL连接器(MySql.EntityFrameworkCore)。

内容的提问来源于stack exchange,提问作者Balsa Stevovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:33:26