首页 > 解决方案 > EF Core 如何将表名称映射到实体名称,而不是 DbSet 名称?

问题描述

我看到 EF Core 中的 CodeFirst 从 DbContext 的 DbSet 名称生成表名称。

如果我有,DbSet<Person> People {get; set;}我会得到Peopleas 的表名Person,但是我希望它是Person

我试过这个解决方案,但它似乎不适用于核心......

之后我尝试了

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
                
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        modelBuilder.Entity(entity.Name)
            .ToTable(entity.Name);
    }
}

这更好,但它给了我带有命名空间的类的全名,有没有办法从中删除命名空间?

标签: .netentity-frameworkentity-framework-coreasp.net-core-5.0ef-core-5.0

解决方案


使用DisplayName()代替Name

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
                
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        modelBuilder.Entity(entity.Name)
            .ToTable(entity.DisplayName());
    }
}

推荐阅读