在EF Core 2中使用单表名称

问题描述 投票:8回答:3

我希望我的域名类名称与我的数据库表名称相匹配(无复数形式。)>

在EF Core 1.1中,我使用此代码执行此操作:

public static void RemovePluralisingTableNameConvention(this ModelBuilder modelBuilder)
{
    foreach (IMutableEntityType entityType in modelBuilder.Model.GetEntityTypes())
    {
        entityType.Relational().TableName = entityType.DisplayName();
    }
}

在EF Core 2.0中,此代码不会编译,因为Relational()不是IMutableEntityType上的方法。无论如何,在EF Core 2.0中,他们添加了IPluralizer,记录在这里:

https://github.com/aspnet/EntityFramework.Docs/blob/master/entity-framework/core/what-is-new/index.md#pluralization-hook-for-dbcontext-scaffolding

没有太多示例显示如何实现与以前相同的行为。关于如何消除EF Core 2中的多元性的任何线索?

我希望我的域名类名称与我的数据库表名称匹配(无复数形式)。在EF Core 1.1中,我使用以下代码执行此操作:public static void RemovePluralisingTableNameConvention(this ModelBuilder ...

c# ef-code-first entity-framework-core
3个回答
6
投票

您可以使用完全相同的代码。 Relational()是在RelationalMetadataExtensions assembly


8
投票

您可以通过使用DbSet<TEntity>而不使用内部EF API调用的方式进行此操作>

ClrType.Name

0
投票

在EF Core 2中,您可以添加protected override void OnModelCreating(ModelBuilder modelBuilder) { foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { // Use the entity name instead of the Context.DbSet<T> name // refs https://docs.microsoft.com/en-us/ef/core/modeling/entity-types?tabs=fluent-api#table-name modelBuilder.Entity(entityType.ClrType).ToTable(entityType.ClrType.Name); } } 。令人费解的是,如果您使用它在具有asp.net核心应用程序实体的库项目中生成类,则需要转到程序包管理器控制台,将库项目选择为默认项目,然后将这些钩子添加到mvc网站项目。如果将钩子添加到一个库中,它将不会发现该钩子。

© www.soinside.com 2019 - 2024. All rights reserved.