EF 核心代码优先迁移自动为表添加 db_owner 前缀

Jos*_*h L 2 sql sql-server entity-framework entity-framework-core asp.net-core

我目前正在使用 EF Core 2.1 代码优先迁移来创建 SQL Server 架构。当我使用以下命令在 SQL Server 中创建/更新表时”

dotnet ef database update
Run Code Online (Sandbox Code Playgroud)

它在我的表前面加上“db_owner”前缀。例如“db_owner.drivers”。

有没有办法在代码中从我的 ef 配置文件设置数据库前缀名称?或者这是 SQL Server 本身实际配置的东西?

Rya*_*yan 5

您可以ToTable在 dbContext 中使用来设置方案名称,如果您不指定,EF core 将dbo按照约定使用。

 public class MyDbContext
 {
   private string schemaName = "MyPrefix";
   protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyEntity>().ToTable("MyTable", schemaName );
    }
 }   
Run Code Online (Sandbox Code Playgroud)

如果您想在配置文件(appsettings.json)中设置 schemaName:

{
  "schemaName": "MyPrefix",
}
Run Code Online (Sandbox Code Playgroud)

您可以使用 DI 在 dbContext 文件中获取配置。

public class MyDbContext
{
    private readonly IConfiguration _configuration;     
    public MyDbContext(DbContextOptions<ApplicationDbContext> options, IConfiguration configuration)
        : base(options)
    {
        _configuration = configuration;
    }

    ...// DbSet<>

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyEntity>().ToTable("MyTable", _configuration["schemaName"]);
    }
}
Run Code Online (Sandbox Code Playgroud)