首页 > 解决方案 > 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$。这意味着我的表以下列方式命名:

知道为什么会发生这种情况,我真的需要添加modelBuilder.HasDefaultSchema("dbo")以缓解这个问题吗?

标签: sql-server.net-coreentity-framework-coreef-code-first

解决方案


推荐阅读