我将EF5与DefaultMembershipProvider一起使用,并希望控制SQL Server中使用的模式,以便为DefaultMembershipProvider创建表格。
EF5表示这是可行的:
modelBuidler.Entity<MyEntity>().ToTable("MyTable", "MySchema");
但由于这些不是“我的”实体,我不能这样做。
问题:
1)那么我该如何在EF5中做到这一点? 2)使用DbModelBuilder.HasDefaultSchema时是否在EF6中处理?
答案 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?