首先使用 Entity Framework 6 代码访问 Oracle Synonyms
Posted
技术标签:
【中文标题】首先使用 Entity Framework 6 代码访问 Oracle Synonyms【英文标题】:Accessing Oracle Synonyms using Entity Framework 6 code first 【发布时间】:2015-02-17 15:35:34 【问题描述】:我目前正在开发一个将使用 Entity Framework 6.1.1 和 Oracle 11g 数据库后端的项目。我将跨多个模式访问表,其中一些模式还具有跨模式的外键关系(查找表、企业数据等)。
传统上,我们使用同义词作为将这些跨模式表暴露给特定登录的一种方式。我的问题是......如何使用代码优先映射在 EF6 中映射这些同义词?我直接在单个模式中映射到表没有问题,但这当然还不够,因为我的表跨越了多个模式。到目前为止,我的代码优先映射无法识别同义词。
是否有人能够对 Oracle 同义词进行代码优先映射?
【问题讨论】:
你能先使用 EF 代码和同义词吗?我目前遇到了同样的问题。 【参考方案1】:您可以尝试为特定实体设置架构:
modelBuilder.Entity<DATA>().ToTable("DATA", "schema");
或者装饰类:
[Table("DATA", Schema="SCHEMA"]
public class DATA..
【讨论】:
【参考方案2】:您可以使用 EF Fluent API 来定义架构:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.HasDefaultSchema("MY_SCHEMA_NAME");
如果您想使用 Oracle 同义词,可以删除架构:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
modelBuilder.HasDefaultSchema(string.Empty);
这将生成包含FROM "MY_TABLE"
而不是FROM "dbo"."MY_TABLE"
或FROM "MY_SCHEMA_NAME"."MY_TABLE"
的SQL
我正在使用:
EntityFramework 6.1.3 Oracle.ManagedDataAccess 12.1.2400 Oracle.ManagedDataAccess.EntityFramework 12.1.2400【讨论】:
以上是关于首先使用 Entity Framework 6 代码访问 Oracle Synonyms的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework 6.0 - 删除时的奇怪行为
如何用Entity Framework 6 连接Sqlite数据库