实体框架核心问题 - 更新数据库创建“用户”模式

Posted

技术标签:

【中文标题】实体框架核心问题 - 更新数据库创建“用户”模式【英文标题】: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 - 与那里的模式无关。今晚或明天我会在下面尝试你的答案 【参考方案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");
    

【讨论】:

以上是关于实体框架核心问题 - 更新数据库创建“用户”模式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .net 核心实体框架迁移更新表(而不是重新创建它们)

在实体框架核心中合并迁移

多对多实体框架和存储库模式插入/更新

c# - 在运行时更改 App.Config 后,实体框架 ConnectionString 不会更新

实体框架核心更新-数据库特定迁移

如何刷新实体框架核心 DBContext?