使用EntityFramework for ODP.NET,为什么以下原始SQL命令挂在Oracle 12c上?

时间:2019-02-05 11:34:55

标签: c# oracle odp.net odp.net-managed

我正在使用

  • Visual Studio 2015
  • Oracle.ManagedDataAccess 18.3.0
  • Oracle.ManagedDataAccess.EntityFramework 18.3.0
  • 实体框架6.2.0

在测试项目中。以下基于EF的原始SQL命令在Oracle 11g Express Edition上执行,但在Oracle 12c Enterprise Edition上失败(更具体地说,它挂起,因为它似乎未完成执行,但不会引发异常)。

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

我的原始SQL当然无效。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我真的不确定为什么它可以在我的11g Express Edition本地副本而不是12c本地副本上起作用,但是根据this websiteREFERENCE是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);
}