gpt4 book ai didi

c# - Entity Framework SqlQuery 选择 LONG RAW 到字节数组

转载 作者:行者123 更新时间:2023-11-30 12:22:12 28 4
gpt4 key购买 nike

我在 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 需要一个成员名称等同于 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

When an OracleDataReader is created containing LONG or LONG RAW types, OracleDataReader defers the fetch of the LONG or LONG RAW column data. The initial number of characters for LONG or bytes for LONG RAW fetched on the client side depends on the InitialLONGFetchSize property of the OracleCommand. By default, InitialLONGFetchSize is 0.

ODP.NET does not support CommandBehavior.SequentialAccess. Therefore, LONG and LONG RAW data can be fetched in a random fashion.

To obtain data beyond InitialLONGFetchSize bytes or characters, a primary key column must be provided in the list of selected columns. The requested data is fetched from the database when the appropriate typed accessor method (GetOracleString for LONG or GetOracleBinary for LONG RAW) is called on the OracleDataReader object.

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com