【问题标题】:Remove default schema 'dbo' when generating linq to sql queries生成 linq to sql 查询时删除默认模式“dbo”
【发布时间】:2014-09-08 04:30:20
【问题描述】:

您好,我遇到了一个问题,我正在开发一个项目,我们正在使用 Entity Framework 5 连接到 sql 和 oracle。对于 sql 它工作正常,但对于 oracle,我需要删除模式名称,因为我所做的是在模型的表属性中我传递了空/null,甚至在 dbcontext 方法的 OnModelCreating 方法中,我将空/null 值传递给架构。但是通过 linq 生成的查询将 dbo 模式附加为默认模式。有什么办法可以避免实体框架将“dbo”附加为架构?

【问题讨论】:

  • Oracle 连接的连接字符串是什么样的?您可以在您的 Oracle 数据库上为用户/登录名设置默认模式,然后为该用户设置一个连接字符串,然后该用户应该可以根据需要工作。
  • 我知道在 oracle 中用户名用作架构名称,但我不希望实体框架附加该架构名称
  • 你能为架构创建别名吗
  • 它是一个产品数据库,因为他们创建了没有模式的表名的同义词

标签: sql asp.net-mvc oracle linq entity-framework


【解决方案1】:

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

  • 创建一个派生自IDbCommandInterceptor 的类。
  • 注册拦截器DbInterception.Add(new NoSechemaInterceptor());
  • 然后在NonQueryExecutingReaderExecutingScalarExecuting方法中,添加如下代码:

    command.CommandText = command.CommandText.Replace("[dbo].", string.Empty);

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。

    尝试在您的 DBContext 的 OnModelCreating 事件中覆盖默认架构:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多