使用Entity Framework 6 Code First访问Oracle同义词

3
我正在开发一个项目,将使用Entity Framework 6.1.1和Oracle 11g数据库后端。我将访问跨多个模式的表,其中一些具有跨模式的外键关系(查找表、企业数据等)。传统上,我们使用同义词来公开这些跨模式表格以供特定登录使用。我的问题是...如何在EF6中使用代码优先映射映射这些同义词?我没有问题映射到单个模式内部的表,但这当然不足以满足我的需求,因为我的表穿越了几个模式。到目前为止,我的代码优先映射未能识别同义词。有人能否做到对Oracle同义词进行代码优先映射?

你能使用EF Code First和同义词吗?我目前也遇到了同样的问题。 - Saint
2个回答

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

1
您可以尝试为特定实体设置模式: modelBuilder.Entity<DATA>().ToTable("DATA", "schema"); 或者装饰类: [Table("DATA", Schema="SCHEMA"] public class DATA{..}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接