使用实体框架6 db优先使用Oracle DB的方法在edmx文件上动态更改架构名称

时间:2019-01-16 12:45:51

标签: c# asp.net-web-api oracle11g entity-framework-6 ef-database-first

我有一个UI页面,其中包含一个带有多个值的下拉列表。

在UI页面上,用户将从下拉菜单中选择一个架构,然后应将与该架构相关的数据加载到网格中。这意味着将来我们可能会获得更多数量的具有相同Oracle数据库和表结构的模式。

已使用默认配置使用DB First方法创建的实体上下文。但是基于上述要求,我需要根据架构更改连接到Oracle DB。

虽然我在下面使用的方法对我没有用,但它始终指向在连接字符串上配置的架构,而不是我要发送到实体上下文的架构。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            if (SchemaName != null)
            {
                modelBuilder.HasDefaultSchema(SchemaName);
            }
            base.OnModelCreating(modelBuilder);
            throw new UnintentionalCodeFirstException();
        }

有人可以建议最好的方法吗?

我尝试在模型创建时应用模式名称,就像上面的代码一样。这对我不起作用。

实际需要是,已经使用DB First方法和默认配置创建了实体上下文。但是基于上述要求,我需要根据架构更改连接到Oracle DB。

1 个答案:

答案 0 :(得分:1)

我通过添加一个帮助器类找到了解决方案,该类将在运行时通过替换架构来更新实体上下文文件。

我刚跟踪了网址EF6 Dynamic Schema Change,对我来说效果很好。 我将连接更改为使用ORACLE,并从我的服务层调用了此“连接”方法。