将默认使用的 SQL Server 架构从 [dbo] 更改为其他架构

本文关键字:dbo 其他 SQL Server 默认 | 更新日期: 2023-09-27 18:33:55

我正在使用EF5和DefaultMemberProvider,并希望控制SQL Server中用于DefaultMemberProvider创建的表的架构。

EF5 表示这是可行的,因为:

modelBuidler.Entity<MyEntity>().ToTable("MyTable", "MySchema");

但由于这些不是"我的"实体,我不能这样做。

问题:

1) 那么如何在 EF5 中执行此操作?2) 使用 DbModelBuilder.HasDefaultSchema 时,是否在 EF6 中处理此问题?

将默认使用的 SQL Server 架构从 [dbo] 更改为其他架构

是的,我确实会升级到 EF6,然后使您的上下文如下所示,例如:

public partial class BlogContext : DbContext
{
    public BlogContext()
        : base("BlogDb")
    {
        Database.SetInitializer<BlogContext>(null);
    }
    public DbSet<BlogPost> BlogPosts { get; set; }
    public DbSet<Category> Categories { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.HasDefaultSchema("");
    }
}

您会看到将末尾的默认架构设置为",这也有效,就我而言,Oracle 12c 将登录用户名作为架构,一切正常。当然,您也可以从配置中加载模式名称并将其插入其中。

注意:自动迁移将不再起作用,因为这似乎使系统非常混乱。请参阅此处了解可能的解决方案,以便至少显式迁移将以某种方式工作: 使用具有代码优先的 IdentityDbContext 的实体框架 自动迁移表位置和架构?