2015-09-30 2 views
2

Я реализую фильтр, используя предикат бриза. Использование BreezeJs и ASP.NET WebAPI (Breeze Side Server) с Entity FrameworkБыл обнаружен двоичный оператор с несовместимыми типами. Найдены типы операндов edm.string и edm.guid для вида равные

Предикат выглядит следующим образом:

var predicate = breezeProvider.breeze.Predicate.create('serialNumber', '==', $scope.filter.serialNumber); 
 
predicates.push(predicate);

Когда я выполнить запрос. Бриз выдает исключение из следующих сообщений:

Был обнаружен двоичный оператор с несовместимыми типами. Найдены типами операндов edm.string и edm.guid для вида равной

The $ scope.filter.serialNumber является строкой и SERIALNUMBER этого свойства GUID

URL-адрес выглядит следующим образом.

http://localhost:51969/breeze/WarehouseProductTransactions/GetProducts? $ = Фильтр (StatusId пе 3d) и (WarehouseId экв 1d) и (AuthorizedADUserId экв 'bTdbnW8t6Uu4D4KHCoQOhg ==') и (SerialNumber экв guid'1b9d065e-eb48-4f3d-883c-2c841771a3e8') & $ OrderBy = Id $ & сверху = 5 & $ = расширения инвентаризации, AuthorizedADUser & $ inlinecount = AllPages &)

Обратите внимание на фрагмент кода:

(Se rialNumber эк guid'1b9d065e-eb48-4f3d-883c-2c841771a3e8')

Моей стороны сервер выглядит следующим образом:

[EnableBreezeQuery(MaxNodeCount = 200)] 
public IQueryable<WarehouseProductTransactionDetail> GetProducts() 
{ 
    return _contextProvider.Context.WarehouseProductTransactionDetails; 
} 

Я пытаюсь понять, как я могу решить эту ситуацию, но нет идея.

Любая помощь приветствуется

+0

Возможно ли, что serialNumber, исходящий от клиента, понимается как строка, а затем код на стороне сервера пытается сравнить с GUID. Я не очень разбираюсь в этих конкретных технологиях, но я думаю, серверу необходимо будет сравнить значение с клиента с идентификатором GUID перед сравнением. Или значение от сервера до строки. – devinallenaz

ответ

6

Я была такая же проблема при сравнении USERID в Breeze запросе. Breeze добавляет «guid» в запрос OData.

Я смог исправить эту проблему, добавив .toType("entityTypeName") к запросу бриза.

let query = new breeze.EntityQuery().from('orders');   
let predicate = breeze.Predicate.create("CreatedBy", "==", userId); 


query = query.where(predicate).toType("Order"); 
Смежные вопросы