【问题标题】:ORA-00904 Occasional Invalid identifier with linq queryORA-00904 带有 linq 查询的偶尔无效标识符
【发布时间】:2019-07-13 10:30:12
【问题描述】:

我有两个不同的 linq 表达式,它们引用数据库中的同一列。一个工作正常,但另一个抛出无效标识符异常 (ORA-00904)。

我发现的大多数问题都包含带有一些语法错误的裸 sql 查询。其他人与实体模型有关,但鉴于它在一次查询中没有遇到问题,我不相信问题出在模型上。

有效的:

    public List<DateTime> GetAvailableDates()
    {
        var retData = new List<DateTime>();

        using (var context = new CASTDbContext())
        {
            var result = context.SomeDataEntity.Select(x => x.CAPTURE_DATE).Distinct().ToList();          
            if(result != null && result.Count > 0)
            {
                retData = result;
            }
        }

        return retData;
    }

不起作用的那个:

    public List<SomeDataModel> GetSomeDataByDate(DateTime date)
    {
        var retData = new List<SomeDataModel>();

        using (var context = new SomeDbContext())
        {                
            var result = context.SomeDataEntity
                .Where( y => DbFunctions.TruncateTime(y.CAPTURE_DATE) == date.Date).ToList(); // the line that's throwing the exception

            if (result != null && result.Count > 0)
            {
                foreach (var item in result)
                {
                    retData.Add(mapper.Map<SomeDataModel>(item));
                }
            }
        }

        return retData;
    }

【问题讨论】:

    标签: c# oracle entity-framework linq data-access


    【解决方案1】:

    问题最终成为模型的不同部分,但只是有关 Oracle 风险的一些信息:

    第一个查询运行良好,因为它只引用了一个在数据库中具有匹配列的特定字段(由于某种原因,oracle 不关心该实例中模型的其余部分)。

    第二个查询不起作用,因为它试图从表中提取每一列,并且模型中缺少一个字段。

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 2019-06-21
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2011-08-27
      • 2011-04-21
      相关资源
      最近更新 更多