Apache Ignite SQL API建表后Linq over SQL查询字段不存在如何解决
报错的根本原因是Apache Ignite的SQL解析器默认会将未用双引号包裹的标识符自动转为全大写:你创建表时写的EffectiveDate没有加引号,实际存储的字段名是EFFECTIVEDATE;而Ignite的Linq提供程序生成SQL时会默认给字段名加双引号保留原始大小写,生成的"EffectiveDate"和实际存储的全大写字段名不匹配,因此触发字段不存在的报错。
你可以任选以下两种方案解决:
方案1:创建表时给字段名加双引号保留大小写
修改建表SQL,所有字段名用双引号包裹,强制保留和C#模型一致的大小写,不需要修改现有C#代码:
CREATE TABLE IF NOT EXISTS Things ( "Id" UUID, "Name" VARCHAR, "EffectiveDate" TIMESTAMP, PRIMARY KEY("Id") ) WITH " TEMPLATE = PARTITIONED, CACHE_NAME = consoleappserver.Thing, VALUE_TYPE = consoleappserver.Thing "
方案2:修改C#数据模型的字段映射,匹配全大写字段名
给[QuerySqlField]特性显式指定全大写的字段名,和SQL建表时自动生成的大写字段对应,不需要修改已有的表结构:
public class Thing { [QuerySqlField(Name = "ID")] public Guid Id { get; set; } [QuerySqlField(Name = "NAME")] public string Name { get; set; } [QuerySqlField(Name = "EFFECTIVEDATE")] public DateTime EffectiveDate { get; set; } }
注意:后续新增字段时请保持规则统一,要么建表时统一加引号保留大小写,要么统一在模型中指定大写映射名,避免再次出现同类匹配问题。
内容的提问来源于stack exchange,提问作者herme 0
相关产品推荐
相关产品推荐

