使用 Linq2db Oracle 提供程序从表中读取固定 CHAR 字符串的值:
CREATE TABLE mytable
(pk NUMBER(15,0) NOT NULL,
fixed_data CHAR(20) DEFAULT ' ' NOT NULL)
虽然在数据库中,FIXED_DATA 字段的长度是 20,
SELECT LENGTH(fixed_data) FROM mytable WHERE pk = 1
-- result is 20
当使用 Linq2Db 读取相同的字段时,值被截断为空字符串:
var row = (from row in database.mytable where row.pk == 1 select row).ToList()[0];
Console.WriteLine(row.fixed_data.Length);
// result is zero
这会导致使用 Linq2Db 更新记录时出现问题,Oracle 将空字符串转换为 NULL,并且 UPDATE 失败:
database.Update(row);
// Oracle.ManagedDataAccess.Client.OracleException: 'ORA-01407: cannot update ("MYSCHEMA"."MYTABLE"."FIXED_DATA") to NULL
Linq2Db 中是否有任何设置用于读取->更新周期以使用 CHAR 类型和 NOT NULL 约束?