首页 > 解决方案 > EF Core 自动将表名从设置更改为设置

问题描述

我对 EF Core 生成的表名有疑问。有人可以帮忙吗?

我有一个SettingEF 配置为的实体

public class SettingConfiguration : IEntityTypeConfiguration<Setting>
{
    public void Configure(EntityTypeBuilder<Setting> builder)
    {
        builder.HasKey(c => c.Id);
        builder.ToTable<Setting>(typeof(Setting).Name.ToLower());
        builder.Property(c => c.Id).ValueGeneratedOnAdd().IsRequired().HasColumnName("id");
        builder.Property(c => c.UserId).IsRequired().HasColumnName("userId");
        builder.Property(c => c.ShowEmail).IsRequired().HasColumnName("showEmail");
    }
}

但是,当我跑步时dotnet ef migrations add InitialCreate,我得到了

migrationBuilder.CreateTable(
            name: "Settings",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
                UserId = table.Column<int>(nullable: false),
                ShowEmail = table.Column<bool>(nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Settings", x => x.Id);
            });

我有另一个以PostEF 配置命名的实体

public class PostConfiguration : IEntityTypeConfiguration<Post>
{
    public void Configure(EntityTypeBuilder<Post> builder)
    {
        builder.HasKey(c => c.Id);
        builder.ToTable<Post>(typeof(Post).Name.ToLower());
        builder.Property(c => c.Id).ValueGeneratedOnAdd().IsRequired().HasColumnName("id");
        builder.Property(c => c.Title).IsUnicode().IsRequired().HasMaxLength(200).HasColumnName("title");
        builder.Property(c => c.Comment).IsUnicode().IsRequired().HasMaxLength(1000).HasColumnName("comment");
    }
}

EF Core 生成的表名是post,符合预期。

migrationBuilder.CreateTable(
                name: "post",
                columns: table => new
                {
                    id = table.Column<int>(nullable: false)
                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
                    title = table.Column<string>(maxLength: 200, nullable: false),
                    comment = table.Column<string>(maxLength: 1000, nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_post", x => x.id);
                });

标签: entity-framework-core

解决方案


这是约定,您将模型定义为单数,EF 会将表名创建为复数。

如果你想摆脱它,请给出一个[Table("YourTableName")]属性。


推荐阅读