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

时间:2013-10-04 02:25:55

标签: c# entity-framework-5

我将EF5与DefaultMembershipProvider一起使用,并希望控制SQL Server中使用的模式,以便为DefaultMembershipProvider创建表格。

EF5表示这是可行的:

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

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

问题:

1)那么我该如何在EF5中做到这一点? 2)使用DbModelBuilder.HasDefaultSchema时是否在EF6中处理?

1 个答案:

答案 0 :(得分:1)

是的确我会升级到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将登录用户名作为架构,一切正常。当然,您也可以从配置中加载模式名称并将其插入到那里。

注意:自动迁移将不再起作用,因为这似乎使系统相当混乱。请参阅此处了解可能的解决方案,以便至少显式迁移可以某种方式起作用:Entity Framework using IdentityDbContext with Code First Automatic Migrations table location and schema?