实体框架核心问题 - 更新数据库创建“用户”模式
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 核心实体框架迁移更新表(而不是重新创建它们)