我目前正在开发一个使用Entity Framework 6.1.1和Oracle 11g数据库后端的项目。我将访问跨多个模式的表,其中一些模式也具有跨模式的外键关系(查找表,企业数据等)。
传统上,我们使用同义词作为将这些跨模式表暴露给特定登录的方法。我的问题是......如何使用代码优先映射在EF6中映射这些同义词?我在单个模式中直接映射到表没有问题,但这当然是不够的,因为我的表跨越了几个模式。到目前为止,我的代码第一个映射不识别同义词。
是否有人能够对Oracle同义词进行代码优先映射?
答案 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"
我正在使用: