(这不是欺骗,请阅读我的评论。)
我刚刚从EF Core Preview 5迁移到Preview 6。 这似乎是一项重大更改,尤其是如果发行版中保留了对现有数据库的映射,则该映射将中断。
在预览5中,我使用了:
entityType.Relational.TableName = entityType.DisplayName();
现在看来Relational
属性已被删除。我不会回过头来手动声明所有数十个实体的TableName,而只是指示EF Core模型构建器不要自动对它们进行复数处理。
答案 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());
}
}
}