C# 将使用的默认SQL Server架构从[dbo]更改为其他内容
我正在将EF5与DefaultMembershipProvider一起使用,并希望控制SQL Server中用于DefaultMembershipProvider创建的表的模式 EF5说这是可行的,因为:C# 将使用的默认SQL Server架构从[dbo]更改为其他内容,c#,entity-framework-5,C#,Entity Framework 5,我正在将EF5与DefaultMembershipProvider一起使用,并希望控制SQL Server中用于DefaultMembershipProvider创建的表的模式 EF5说这是可行的,因为: modelBuidler.Entity<MyEntity>().ToTable("MyTable", "MySchema"); modelBuidler.Entity().ToTable(“MyTable”、“MySchema”); 但由于这些不是“我的”实体,我不能这样做 问
modelBuidler.Entity<MyEntity>().ToTable("MyTable", "MySchema");
modelBuidler.Entity().ToTable(“MyTable”、“MySchema”);
但由于这些不是“我的”实体,我不能这样做
问题:
1) 那么在EF5中我该怎么做呢?
2) 在使用DbModelBuilder.HasDefaultSchema时,EF6中是否处理了此问题?是的,我确实会升级到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("");
}
}
公共部分类BlogContext:DbContext
{
公共博客上下文()
:base(“BlogDb”)
{
Database.SetInitializer(null);
}
公共DbSet BlogPosts{get;set;}
公共数据库集类别{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Conventions.Remove();
modelBuilder.HasDefaultSchema(“”);
}
}
您可以看到在末尾将默认模式设置为“”,这同样有效。在我的例子中,Oracle 12c将登录用户名作为模式,一切正常。当然,您也可以从配置中加载模式名并将其插入其中
注意:自动迁移将不再有效,因为这似乎会使系统非常混乱。请参阅此处,了解可能的解决方案,以便至少显式迁移能够以某种方式起作用:可能重复这篇关于更改表内容的文章。我所要做的就是更改表所在的模式。与此同时,我们发现您需要设置模式名称,虽然很遗憾,但却是真的。架构名称为空时发生意外行为。我认为这是一个错误,并将它与甲骨文,但我们没有一个维护合同。因此,我们编写了一个方法,从连接字符串中提取模式名称,并将其注入上下文中,同时将其正确设置到MigrationContext中。。。