【问题标题】:Entity Framework Core Issue - Update-Database Creating "User" Schemas实体框架核心问题 - 更新数据库创建“用户”模式
【发布时间】:2019-05-11 16:41:04
【问题描述】:

我已经在使用 .NET Core 2.0(最初是 1.0)和 EF Core 的生产应用程序上工作了很长时间。

这是一个 Code-First 设计的应用程序,因此所有数据库更改都是通过迁移进行的。

在最近的部署之前,Update-Database 会正确地进行更改 - 但是,最近每次添加模型时它都会创建新架构(而不是像往常一样添加到 dbo 架构中)。

例子:

New Class Model: Test.cs
Table created in Database: DOMAIN\CurrentUser.Test

关于为什么会发生这种情况的任何想法?

我想我可以深入研究 migrationBuilder 以弄清楚它是如何做出 Schema 决策的,但似乎必须改变一些简单的东西才能改变行为。

“DOMAIN\CurrentUser”在相关服务器上拥有 dbo 权限。

【问题讨论】:

  • 分享我们生成的与Test模型相关的迁移。迁移文件中有DOMAIN\CurrentUser吗?检查数据库是否更改了数据库中的默认架构。
  • 我已经检查了迁移文件中的 SQL - 与那里的模式无关。今晚或明天我会在下面尝试你的答案

标签: sql asp.net entity-framework asp.net-core entity-framework-core


【解决方案1】:

要从EF Core 更改架构,请尝试使用builder.HasDefaultSchema("newschema");builder.Entity<User>().ToTable 进行配置。

用于更改所有表的架构。

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public DbSet<User> User { get; set; }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        builder.HasDefaultSchema("newschema");
    }
}

用于更改特定表的架构。

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    public DbSet<User> User { get; set; }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        builder.Entity<User>().ToTable("User", "newSchema");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多