将 EntityFramework 用于 ODP.NET,为什么以下原始 SQL 命令会在 Oracle 12c 上挂起?
Using EntityFramework for ODP.NET, why does the following raw SQL command hang on Oracle 12c?
我正在使用
- Visual Studio 2015
- Oracle.ManagedDataAccess 18.3.0
- Oracle.ManagedDataAccess.EntityFramework 18.3.0
- Entity Framework6.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 肯定是无效的。我做错了什么?
我真的不确定为什么这适用于我本地的 11g Express Edition 而不是 12c,但根据 this website,单词 REFERENCE
是 [=15= 中的保留字] 并且不应用作标识符。完全限定原始 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);
}
我正在使用
- Visual Studio 2015
- Oracle.ManagedDataAccess 18.3.0
- Oracle.ManagedDataAccess.EntityFramework 18.3.0
- Entity Framework6.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 肯定是无效的。我做错了什么?
我真的不确定为什么这适用于我本地的 11g Express Edition 而不是 12c,但根据 this website,单词 REFERENCE
是 [=15= 中的保留字] 并且不应用作标识符。完全限定原始 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);
}