Я пытаюсь получить данные с моего контроллера Webapi2 Breeze с Entity Framework 6 и .NET 4.5.1. И получите ошибку «не удалось найти свойство», когда я использую предложение Where в свойстве навигации. Звонок даже не сделан в контроллер Webapi2Breeze: Не удалось найти свойство: XYZ по типу: YYY при выполнении executeQuery в менеджере объектов
Если я не укажу предложение where, данные вернутся правильно.
Соответствующая часть C# класса:
public class NotificationRule {
public Guid NotificationRuleId { get; set; }
public virtual NotificationRuleSet NotificationRuleSet { get; set; }
}
Соответствующая часть С # класса в навигационном NotificationRuleSet собственности:
public class NotificationRuleSet{
public Guid NotificationRuleSetId { get; set; }
public virtual List<NotificationRule> NotificationRules { get; set; }
}
Соответствующая часть контроллера C# Breeze:
public IQueryable<NotificationRuleSet> NotificationRuleSets()
{
return _contextProvider.Context.NotificationRuleSets;
}
public IQueryable<NotificationRule> NotificationRules()
{
return _contextProvider.Context.NotificationRules;
}
Соответствующая часть запроса (машинописный вид):
var query = breeze.EntityQuery.from("NotificationRules")
.where ("NotificationRuleSet.NotificationRuleSetId","==", this.NotificationRuleSetId)
.expand("NotificationRuleSet");
var Result = this.BreezeEntityManager
.executeQuery(query)
.then((data) => this.RefreshViewModelCallback(data))
.fail((data) => alert("Fail to retrieve data"));
Если я оставляю где положение вне, данные корректно переданы, как вы можете видеть в этом Скрипач свалка:
{
"$id": "1",
"$type": "Imp.Classes.NotificationRule, Imp",
"NotificationRuleId": "11111111-be1e-423c-ac5b-f2c689093aca",
"NotificationRuleSet": {
"$id": "2",
"$type": "Imp.Classes.NotificationRuleSet, Imp",
"NotificationRuleSetId": "11111111-1bd6-4520-9f69-381504b8e2b2",
"NotificationRules": [
{
"$ref": "1"
}
],
},
}
Так что я получаю сообщение об ошибке, что свойство не существует, но похоже, существует.
Использование функции «Где» на невигационном объекте работает нормально.
Я кое-что прочитал о camelCasing, но вместо NotificationRuleSet с уведомлениемRuleSet дает ту же ошибку.
EDIT: Решения, кажется, что NotificationRules в запросе Viewmodels должен начинаться с строчного символа, независимо от того, первый символ имени метода контроллера имеет верхний или нижний регистр.
Я пробовал свой вариант, но тот же результат. Но так как вы были так уверены, что это был camelCasing, я пробовал несколько комбинаций верхнего/нижнего регистра. Кажется, что ТОЛЬКО var query = breeze.EntityQuery.from ("notificationRules") должен быть строчным. Спасибо, что вернули меня на правильный путь. – RHAD