删除默认模式';dbo';生成linq到sql查询时

删除默认模式';dbo';生成linq到sql查询时,sql,asp.net-mvc,oracle,linq,entity-framework,Sql,Asp.net Mvc,Oracle,Linq,Entity Framework,大家好,我有一个问题,我正在做一个项目,我们使用EntityFramework5连接sql和oracle。对于sql,它可以正常工作,但是对于oracle,我需要删除模式名,因为我所做的是在我传递了empty/null的模型的表Attibute中,甚至在dbcontext方法的OnModelCreating方法中,我向模式传递了empty/null值。但是通过linq生成的查询附加了dbo模式作为默认模式。有没有办法避免实体框架将“dbo”附加为模式?如果可以升级到EF6。您可以尝试截取所有命令

大家好,我有一个问题,我正在做一个项目,我们使用EntityFramework5连接sql和oracle。对于sql,它可以正常工作,但是对于oracle,我需要删除模式名,因为我所做的是在我传递了empty/null的模型的表Attibute中,甚至在dbcontext方法的OnModelCreating方法中,我向模式传递了empty/null值。但是通过linq生成的查询附加了dbo模式作为默认模式。有没有办法避免实体框架将“dbo”附加为模式?

如果可以升级到EF6。您可以尝试截取所有命令文本并删除所有
[dbo]
文本

  • 创建从派生的类
  • 注册拦截器
    DbInterception.Add(new NoSechemaInterceptor())
  • 然后在
    NonQueryExecuting
    ReaderExecuting
    ScalarExecuting
    方法中,添加以下代码:

    command.CommandText=command.CommandText.Replace(“[dbo]”,string.Empty)


    • 我也有同样的问题

      尝试在DBContext的OnModelCreating事件中重写默认架构:

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
         base.OnModelCreating(modelBuilder);
      
         // empty schema
         modelBuilder.HasDefaultSchema("");
      }
      

      Oracle连接的连接字符串是什么样子的?您可以为Oracle db上的用户/登录名设置默认架构,然后为该用户设置连接字符串,该字符串将根据您的需要工作。我知道在Oracle中,用户名用作架构名称,但我不希望实体框架附加该架构名称。您可以为该架构创建别名吗使用不带架构的表名创建同义词