0

我正在使用

  • 视觉工作室 2015
  • Oracle.ManagedDataAccess 18.3.0
  • Oracle.ManagedDataAccess.EntityFramework 18.3.0
  • 实体框架 6.2.0

在一个测试项目中。以下基于 EF 的原始 SQL 命令在 Oracle 11g 快捷版上执行,但在 Oracle 12c 企业版上失败(更具体地说,它挂起,因为它似乎没有完成执行,但没有引发异常)。

[OneTimeTearDown]
public override void DeleteTestData(FooContext context)
{
    var sql = "delete from FOO.BAR " +
              "where TO_CHAR(REFERENCE) = 'TestStore'";
    context.Database.ExecuteSqlCommand(sql);
}

当然,我的原始 SQL 是无效的。我究竟做错了什么?

4

1 回答 1

0

我真的不确定为什么这适用于我的 11g Express Edition 而不是 12c 的本地副本,但根据这个网站,这个词REFERENCE是 PL/SQL 中的保留字,不应该用作标识符。完全限定原始 SQL 中的列名解决了我的问题。

[OneTimeTearDown]
public override void DeleteTestData(FooContext context)
{
    var sql = "delete from FOO.BAR " +
              "where TO_CHAR(FOO.BAR.REFERENCE) = 'TestStore'";
    context.Database.ExecuteSqlCommand(sql);
}
于 2019-02-05T11:40:10.033 回答