Я пытаюсь выполнить запрос с параметрами против локального кеша или сервера (если в кеше ничего не найдено).BreezeSharp - запрос с параметрами локального кеша
public async Task<List<T>> Get(IDictionary<string, object> parameters, string resourceName = "", FetchSource fetchSource = FetchSource.None)
{
try
{
var query = resourceName == string.Empty ? EntityQuery.From<T>().WithParameters(parameters) : EntityQuery.From<T>(resourceName).WithParameters(parameters);
var queryResult = await this.ExecuteQuery(query, fetchSource);
var result = queryResult.ToList();
return result;
}
catch (Exception e)
{
return new List<T>(); // return empty result instead
}
}
FetchSource наше перечисление:
public enum FetchSource
{
None = 0,
FromServer = 1,
FromCache = 2,
FromCacheOrServer = 3
}
А вот 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);
}
//...
}
При попытке выполнить запрос локально данное исключение:
{"Невозможно лить объект типа 'WhereEnumerableIterator`1 [StanleySteemer.Nimbus.Client.Common.Model.Proxy.RouteOrder]' к типу 'DataServiceOrderedQuery [StanleySteemer.Nimbus.Client.Common.Model.Proxy.RouteOrder]'. "}
Хотя я не мог найти что-либо в документации конкретно в отношении к этому вопросу, я реализовал подобную функциональность в BreezeJS, который работал без проблем (UPDATE: он не работает правильно):
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);
}
данных архитектура в JavaScript похожа на пример TempHire.
Это известная проблема? Есть ли какое-нибудь обходное решение?
Я не выполнил какую-либо пользовательскую реализацию. Я снова проверил код JavaScript, и я ошибся: ** он не работает как ожидалось **. В основном запрос к локальному кэшу игнорирует параметры и возвращает каждый объект, найденный в кеше для данного ресурсаName (entityType). Я собираюсь принять вас в качестве ответа: ** запрос с параметрами в отношении локального кеша не поддерживается в BreezeJS или BreezeSharp ** – markolazic88