实体框架忽略架构

Posted

技术标签:

【中文标题】实体框架忽略架构【英文标题】:Entity Framework Ignore Schema 【发布时间】:2014-07-17 20:10:02 【问题描述】:

我正在使用 Entity Framework 6 Code First 连接到 oracle 数据库。 EF 使用“dbo”作为架构。我宁愿不指定架构,而是让 Oracle 从连接字符串中解析架构。

有没有办法从查询中省略“dbo”或任何架构?

给出的示例: 而不是“从 dbo.table 中选择 *”,我希望看到“从表中选择 *”。

目前,我正在解析 userId 的连接字符串并将其用作架构,但我不想使用这种技术。

【问题讨论】:

你的连接字符串是什么样的? (先消毒...) 【参考方案1】:

FrankO 的回答是正确的,因为您可以使用 Fluent API 指定默认架构。

此外,根据我的经验,同样的方法可用于删除默认架构,允许 Oracle 在连接字符串中指定的架构或您公司的策略是访问所有表的情况下解析架构通过公共同义词。

protected override void OnModelCreating(DbModelBuilder modelBuilder)

    modelBuilder.HasDefaultSchema(string.Empty);

这将生成包含FROM "MY_TABLE" 而不是FROM "dbo"."MY_TABLE" 的SQL

我正在使用:

EntityFramework 6.1.3 Oracle.ManagedDataAccess 12.1.2400 Oracle.ManagedDataAccess.EntityFramework 12.1.2400

【讨论】:

我可以假设这也是您在数据库优先中的做法吗?【参考方案2】:

您可以使用 Fluent API 来声明默认架构,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)

    modelBuilder.HasDefaultSchema("your_schema_here");

【讨论】:

以上是关于实体框架忽略架构的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SQL Express 上的实体框架会忽略超时?

这是与实体框架交互的正确方法吗?

让实体框架忽略派生类型

实体框架查询忽略我的 orderby

实体框架代码优先迁移忽略 [Key] 并强制复合键

实体框架代码首先忽略连接字符串,而不是使用IIS