BreezeSharp-针对本地缓存使用参数进行查询

BreezeSharp-针对本地缓存使用参数进行查询,breeze,breeze-sharp,Breeze,Breeze Sharp,我试图对本地缓存或服务器执行带有参数的查询(如果在缓存中找不到任何内容) 下面是ExecuteQuery方法: protected async Task<IEnumerable<T>> ExecuteQuery(EntityQuery<T> query, FetchSource fetchSource = FetchSource.None) { //... if (fetchSource == F

我试图对本地缓存或服务器执行带有参数的查询(如果在缓存中找不到任何内容)

下面是ExecuteQuery方法:

protected async Task<IEnumerable<T>> ExecuteQuery(EntityQuery<T> query, FetchSource fetchSource = FetchSource.None)
        {
            //...
            if (fetchSource == FetchSource.FromCacheOrServer)
            {
                var result = query.ExecuteLocally(this.EntityManager);  // Throws error
                if (result != null && result.Any())         
                {
                    return result;
                }

                return await query.Execute(this.EntityManager);
            }
            //...
        }
JavaScript中的数据架构类似于TempHire示例


这是一个已知的问题吗?有什么解决办法吗?

我不太清楚,breeze.js和breeze.sharp都不能自动执行包含参数的“本地缓存查询”。这是因为参数的解释只在服务器上定义,而不是在客户机上定义


听起来好像您所做的是在breeze.js中定义特定“with parameters”查询的自定义实现,它完全绕过了breeze的内部实现。这是正确的吗

我还没有做任何自定义实现。我再次测试了JavaScript代码,但我错了:它没有按预期工作。基本上,对本地缓存的查询忽略参数,并返回给定resourceName(entityType)在缓存中找到的每个实体。我将接受您的回答,因为结论是:在BreezeJS或BreezeSharp中不支持使用参数对本地缓存进行查询
public enum FetchSource
{
    None = 0,

    FromServer = 1,

    FromCache = 2,

    FromCacheOrServer = 3
}
protected async Task<IEnumerable<T>> ExecuteQuery(EntityQuery<T> query, FetchSource fetchSource = FetchSource.None)
        {
            //...
            if (fetchSource == FetchSource.FromCacheOrServer)
            {
                var result = query.ExecuteLocally(this.EntityManager);  // Throws error
                if (result != null && result.Any())         
                {
                    return result;
                }

                return await query.Execute(this.EntityManager);
            }
            //...
        }
    findWithParametersInCacheOrServer = function (parameters, recordsLimit) {
        var query = breeze.EntityQuery
            .from(resourceName)
            .withParameters(parameters);

        var r = executeCacheQuery(query);
        if (r) {
            if (r.length > recordsLimit) {
                return Q.resolve(r);
            }
        }

        return executeQuery(query);
    };

    function executeCacheQuery(query) {
        return entityManagerProvider.manager().executeQueryLocally(query);
    }