【问题标题】:The left hand side of a binary predicate cannot be a literal expression, it must be a valid property or functional predicate expression: PropertyName二元谓词的左侧不能是文字表达式,它必须是有效的属性或功能性谓词表达式:PropertyName
【发布时间】:2026-02-08 23:40:02
【问题描述】:

我是微风 js 的新手。我的 spa 应用程序使用了轻量级、Knockout、EF 和 MVC 框架。

我的 POCO 实体定义是

public partial class Tbl_GLB_Library
    {
        System.Guid ID { get; set; }
        public string FileName { get; set; }
        public string Extension { get; set; }
        public Nullable<long> Size { get; set; }
        public string Description { get; set; }
        public Nullable<System.DateTime> CreationTime { get; set; }
        public Nullable<System.DateTime> LastWriteTime { get; set; }
        public Nullable<System.DateTime> LastAccessTime { get; set; }
        public byte[] FileData { get; set; }
        public string FilePath { get; set; }
        public byte[] RowVersion { get; set; }
}

在客户端,我使用自定义构造函数添加了一个未映射的属性:

function addTbl_GLB_LibrariesProperties() {
        var metadataStore = Manager.metadataStore;
        metadataStore.registerEntityTypeCtor('Tbl_GLB_Library', null, Tbl_GLB_LibraryInit);

        function Tbl_GLB_LibraryInit(Library) {
            Library.FileContent = ko.observable();
        }
    }

获取元数据和一些数据后,我需要查询缓存的数据。

 query = breeze.EntityQuery.from("Tbl_GLB_Library").where(breeze.Predicate.create('FileContent', breeze.FilterQueryOp.Equals, null));

return Manager.executeQueryLocally(query);

此方案适用于所有映射的属性,但对于未映射的属性FileContent,会引发异常!我该如何解决这个问题?

【问题讨论】:

    标签: knockout.js breeze


    【解决方案1】:

    您是否将 NamingConvention 设置为 camelCase?如果谓词的左手表达式是错误的情况,则会出现此错误消息。只需尝试将其更改为 fileContent,您就会很快知道这是否是问题所在。

    【讨论】:

    • 我正在使用 PascalCase 并且没有更改微风的设置。默认情况下,NameConvention 值为“NamingConvention.none”,表示“没有变化”。