EF核心API已删除,现在如何删除自动复数?

时间:2019-06-20 12:47:31

标签: entity-framework-core

(这不是欺骗,请阅读我的评论。)

我刚刚从EF Core Preview 5迁移到Preview 6。 这似乎是一项重大更改,尤其是如果发行版中保留了对现有数据库的映射,则该映射将中断。

在预览5中,我使用了:

entityType.Relational.TableName = entityType.DisplayName();

现在看来Relational属性已被删除。我不会回过头来手动声明所有数十个实体的TableName,而只是指示EF Core模型构建器不要自动对它们进行复数处理。

2 个答案:

答案 0 :(得分:1)

EF Core 3 introduces, starting preview6, breaking changes on Provider-specific Metadata API。这包括删除RelationalMetadataExtensions及其扩展方法,例如Relational(this IMutableEntityType entityType)

它被RelationalEntityTypeExtensions代替,您可以在其中执行以下操作:

IMutableEntityType entity = ...;
entity.SetTableName(entity.DisplayName());

这样,可以按照this answer on a related question

中的说明删除自动复数。
using Microsoft.EntityFrameworkCore.Metadata;

public static class ModelBuilderExtensions 
{
    public static void RemovePluralizingTableNameConvention(this ModelBuilder modelBuilder)
    {
        foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes())
        {
            entity.SetTableName(entity.DisplayName());
        }
    }
}

答案 1 :(得分:0)

Jan Paolo Go's Answer 的改进版本,这可以防止中间表变成TeacherStudent Dictionary

public static class ModelBuilderExtensions 
{
    public static void RemovePluralizingTableNameConvention(this ModelBuilder modelBuilder)
    {
    
        foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes())
        {
           if (entity is EntityType { IsImplicitlyCreatedJoinEntityType: true })
           {
             continue;
           }
           entity.SetTableName(entity.DisplayName());
        }
    }
}