【问题标题】:Oracle Table cannot be found via EF Core无法通过 EF Core 找到 Oracle 表
【发布时间】:2020-04-02 09:02:49
【问题描述】:

我只是想知道,为什么我正在获取数据,但无法删除它? 错误是

ORA-06550:第 4 行,第 9 列:

PL/SQL:ORA-00942:未找到表或视图

var entries = await _db.Set<T>().Where(x => x.OBJECT_ID == objectId).ToListAsync();
                _db.Set<T>().RemoveRange(entries);
                await _db.SaveChangesAsync();

对应的类是

[Table("PC_NS_REC_MSG_LIVE", Schema = "ENERGYDATASTORE")]
public class PC_NS_REC_MSG_LIVE : IReceivedMessage
{

}

以前可以,但是突然这条语句不能再执行了。

【问题讨论】:

    标签: c# entity-framework .net-core entity-framework-core


    【解决方案1】:

    您还在使用 dotnet core 2 和 EF core 2 吗? 在撰写本文时(2020 年 4 月 2 日),oracle ef 提供程序仅支持 ef 核心。 https://www.nuget.org/packages/Oracle.EntityFrameworkCore/

    这可能是个问题...

    【讨论】:

    • 正确。对于 oracle,我正在使用与核心相关的所有内容
    • 是的 - 它让我们在 .net core 2 上也有保留 - 这真的很烦人。那你可以把我的答案标记为正确吗?
    • 嗯,它在昨天之前使用 ef core 确实有效。 2.2.X。当前版本一定不是问题。也许发生了另一个我不知道的问题?
    • 不是 100% 确定,但我们的团队决定坚持使用 asp.net core 2.2 和 ef core 2.2。对于受影响的服务。但是,如果有人确实使用 EF Core 2.2 运行它,那将会很有趣。和 dotnet core 3.X
    • 我能够解决这个问题。感谢您的意见。希望 Oracel EF Core 3.x 能尽快发布。
    【解决方案2】:

    我能够解决这个问题。 我从

    切换了我的查询(以另一种方法)
    dbContext.Set<T>.ToListAsync();
    

    dbContext.T.FromSql("sqlQueryString").ToListAsync();
    

    在那之后,我无法使用任何其他dbContext.Set&lt;T&gt; 或执行DbCommands

    解决办法就是把上面的语句改成

    dbContext.T.FromSql("sqlQueryString").AsNoTracking().ToListAsync();
    

    现在我可以像以前一样使用所有东西了。希望这对其他人也有帮助。

    【讨论】:

      【解决方案3】:

      请记住,Oracle 目录区分大小写。如果在创建表时使用分隔的混合大小写标识符,则在查询它们时必须使用分隔的混合大小写标识符。如果您在创建表时使用未定界标识符,Oracle 会将标识符转换为全部大写,并将查询中的标识符转换为大写以匹配目录项。

      所以

      CREATE TABLE "Foo" ...
      

      CREATE TABLE Foo ...
      

      创建两个不同名称的不同表。第一个名为“Foo”,第二个名为“FOO”。和查询

      SELECT * FROM foo
      

      将查询第二个。

      【讨论】:

        猜你喜欢
        • 2013-12-22
        • 2020-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 2015-03-12
        相关资源
        最近更新 更多