使用 EF Core 从 PostgreSQL 查询 bytea 值的长度
Query the length of a bytea value from PostgreSQL with EF Core
在我的带有 Entity Framework Core 和 Npgsql 的 .NET Core 应用程序中,我想查询包含二进制数据的记录。但有时我不需要实际数据,只需要它的字节长度。那将是这样的查询:
dbContext.BinaryFiles
.Select(f => new
{
Name = f.Name,
Length = f.Data.Length
}
.ToList();
文件 class 如下所示:
public class BinaryFile
{
public string Name { get; set; }
public byte[] Data { get; set; }
}
DbContext
包含一个 DbSet<BinaryFile>
。 table 定义为:
create table binary_files
(
id serial primary key,
name varchar(200) not null,
data bytea not null
);
当我尝试此操作时,出现错误:Npgsql.PostgresException:“42883:函数基数 (bytea) 不存在”。生成的查询是这样的:
SELECT b.name AS "Name", cardinality(b.data) AS "Length"
FROM binary_files AS b
当我以交互方式尝试此查询时,我得到了一个结果:
SELECT b.name AS "Name", LENGTH(b.data) AS "Length"
FROM binary_files AS b
所以问题是 .NET Array.Length
属性 没有被翻译成足够的 SQL LENGTH
函数,而是其他东西。
这是错误还是我使用不当?我怎样才能只得到想要的数据?
版本:
- .NET 核心 3.1.1
- Entity Framework 核心 3.1.1
- Npgsql 4.1.2
- Npgsql.EntityFrameworkCore.PostgreSQL 3.1.0
- PostgreSQL 12 在 Windows 10 x64
翻译字节数组的长度还没有实现...使用 https://github.com/npgsql/efcore.pg/issues/1226 跟踪这个。 EF Core 主要提供程序(SqlServer 和 Sqlite)最近合并了对此的支持,仅适用于 5.0。
在我的带有 Entity Framework Core 和 Npgsql 的 .NET Core 应用程序中,我想查询包含二进制数据的记录。但有时我不需要实际数据,只需要它的字节长度。那将是这样的查询:
dbContext.BinaryFiles
.Select(f => new
{
Name = f.Name,
Length = f.Data.Length
}
.ToList();
文件 class 如下所示:
public class BinaryFile
{
public string Name { get; set; }
public byte[] Data { get; set; }
}
DbContext
包含一个 DbSet<BinaryFile>
。 table 定义为:
create table binary_files
(
id serial primary key,
name varchar(200) not null,
data bytea not null
);
当我尝试此操作时,出现错误:Npgsql.PostgresException:“42883:函数基数 (bytea) 不存在”。生成的查询是这样的:
SELECT b.name AS "Name", cardinality(b.data) AS "Length"
FROM binary_files AS b
当我以交互方式尝试此查询时,我得到了一个结果:
SELECT b.name AS "Name", LENGTH(b.data) AS "Length"
FROM binary_files AS b
所以问题是 .NET Array.Length
属性 没有被翻译成足够的 SQL LENGTH
函数,而是其他东西。
这是错误还是我使用不当?我怎样才能只得到想要的数据?
版本:
- .NET 核心 3.1.1
- Entity Framework 核心 3.1.1
- Npgsql 4.1.2
- Npgsql.EntityFrameworkCore.PostgreSQL 3.1.0
- PostgreSQL 12 在 Windows 10 x64
翻译字节数组的长度还没有实现...使用 https://github.com/npgsql/efcore.pg/issues/1226 跟踪这个。 EF Core 主要提供程序(SqlServer 和 Sqlite)最近合并了对此的支持,仅适用于 5.0。