EF 核心代码优先的奇怪模式命名

问题描述

我遇到了一个我以前从未见过的奇怪问题,架构命名优先使用 EF 核心代码

我刚刚创建了一个新类 LogEntry,用于记录发送给我们用户的短信和电子邮件

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") 来缓解这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)