首先使用Entity Framework 6代码访问Oracle同义词

时间:2014-12-18 18:41:49

标签: oracle oracle11g entity-framework-6

我目前正在开发一个使用Entity Framework 6.1.1和Oracle 11g数据库后端的项目。我将访问跨多个模式的表,其中一些模式也具有跨模式的外键关系(查找表,企业数据等)。

传统上,我们使用同义词作为将这些跨模式表暴露给特定登录的方法。我的问题是......如何使用代码优先映射在EF6中映射这些同义词?我在单个模式中直接映射到表没有问题,但这当然是不够的,因为我的表跨越了几个模式。到目前为止,我的代码第一个映射不识别同义词。

是否有人能够对Oracle同义词进行代码优先映射?

2 个答案:

答案 0 :(得分:1)

您可以尝试设置特定实体的架构:

modelBuilder.Entity<DATA>().ToTable("DATA", "schema");

或装饰班级:

[Table("DATA", Schema="SCHEMA"] public class DATA{..}

答案 1 :(得分:1)

您可以使用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