我正在 Entity Framework 中执行查询以将 LONG RAW 数据选择到字节数组中。

var result = db.Database.SqlQuery<byte[]>("SELECT MESSAGE FROM FOCUS.ENTRIES");
var list = await result.ToListAsync();

当我执行这段代码时,我得到了一个字节数组列表,但它们都是空的。在数据库中它们不为空。

MESSAGE 表如下所示:
  CREATE TABLE "FOCUS"."ENTRY"
  (  "PRIMKEY" NUMBER,
     "TITLE" VARCHAR2,
     "MESSAGE" LONG RAW
  );

我使用 ODP.NET,托管驱动程序作为数据库提供程序。

我想这是一些映射问题,但我无法弄清楚。

欢迎任何帮助。

谢谢!

最佳答案

SqlQuery 需要一个 class,其成员名称等同于 SQL 列。

public class MessageInfo{
    public byte[] Message;
}

var result = await db.Database
    .SqlQuery<MessageInfo>("SELECT MESSAGE FROM FOCUS.ENTRIES")
    .ToListAsync();
var list = result.Select( x => x.Message );

Oracle Docs 中的一些笔记,https://docs.oracle.com/html/A96160_01/features.htm



所以尝试添加主键,看看是否可以检索数据。否则,如果您无法更改配置,您将不得不跳过 SqlQuery 并直接使用 ODP.NET 来获取。或者您必须创建 OracleConnection 的实例并将其作为参数传递给 DbContext 的构造函数。

关于c# - Entity Framework SqlQuery 选择 LONG RAW 成字节数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41889925/

10-12 19:42