sql-server - EF 核心代码优先的奇怪模式命名
问题描述
我遇到了一个以前从未见过的奇怪问题,即使用 EF 核心代码优先的模式命名。
我刚刚创建了一个新类LogEntry
,用于记录发送给用户的 SMS 和电子邮件。
public class LogEntry
{
public LogEntry(Guid id)
{
Id = id;
}
public Guid Id { get; set; }
public Provider Provider { get; set; } // Enum
public string Content { get; set; }
public string Recipient { get; set; }
...
}
然后我在我的数据库上下文类中添加了配置,在OnModelCreating(modelBuilder modelBuilder)
public virtual DbSet<LogEntry> Log { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<LogEntry>(entity =>
{
entity.HasKey(log => log.Id);
entity.HasIndex(log => log.Date);
entity.HasIndex(log => log.Provider);
entity.HasIndex(log => log.Recipient);
...
});
}
然后我跑去dotnet ef migrations add SomeMigration
实际添加迁移。我设置了自动迁移,以便在项目启动时自动更新我的数据库。到目前为止,一切都很好。
现在,一旦我去查看它创建的新表,我就对数据库模式制定了一个奇怪的命名约定。
我的 IIS 网站应用程序池与特定的托管 AD 用户一起运行,我们称之为msvc-log-api
我习惯 EF 始终使用该dbo
架构,因为它默认为该架构,但出于某种奇怪的原因,EF 决定创建一个以我的托管 AD 用户命名的新架构mydomain\msvc-log-api$
。这意味着我的表以下列方式命名:
mydomain\msvc-log-api$.__EFMigrationHistory
mydomain\msvc-log-api$.Log
知道为什么会发生这种情况,我真的需要添加modelBuilder.HasDefaultSchema("dbo")
以缓解这个问题吗?
解决方案
推荐阅读
- python - Pytesseract 号码错误
- node.js - 如何使用 Playwright 滚动到特定浏览器版本?
- webdriver-io - 如果 Webdriver.IO 测试运行失败,我如何在 shell 脚本中检测?
- python - 以给定的概率从字典中随机选择一个单词
- c - 如何使 libreadline 或 libedit 应对 SIGALRM?
- node.js - 为什么 Node.js 与浏览器不兼容?
- lambda - sympy 和 lambda() 的区别
- python - Python:`foo = object.method; foo is object.method` 返回 `False` 尽管 reprs 相同
- python - Python/BILYB/Pymultines/pymc 中贝叶斯推理的自定义可能性
- java - Spring Webflux WebClient:返回订阅()的结果?