我正在尝试使用 EntityFramework Codefirst 和 Oracle 数据库创建一个独立于架构的模型,但 EF 使用 dbo 作为迁移的默认值作为架构。我重写了 DBContext 上的 OnModelCreating 方法来解决此问题,并在 connectionString 中使用用户
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema(string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
问题是 __MigrationHistory 忽略此默认架构,并且在运行第一次迁移时出现此错误:
ORA-01918: 用户 'dbo' 不存在
尝试使用此 msdn 条目来自定义该表的架构。
自定义历史上下文:
public class CustomHistoryContext : HistoryContext
{
public CustomHistoryContext(DbConnection dbConnection, string defaultSchema)
: base(dbConnection, defaultSchema) {}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema(String.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
和数据库配置:
public sealed class Configuration :
DbMigrationsConfiguration<Model.MyDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
SetHistoryContextFactory("Oracle.ManagedDataAccess.Client",
(connection, defaultSchema) …Run Code Online (Sandbox Code Playgroud)