2014-08-29 2 views
1

Я могу проверить объект с использованием кода entity.entityAspect.validateEntity(). Однако это не подтверждает свойства навигации. У меня есть отношения «один к одному» и «один ко многим» с сущностями. Я хочу проверить как сущность, так и ее навигационные свойства. Как я могу сделать это с ветерком?Breeze Validate Entity и его навигационные свойства

EDIT У меня есть класс

public class ClassA{ 
public int id{get; set;} 
public List<ClassB> navigationArray{get; set;} 
} 


public class ClassB{ 
public int myClass {get; set;} 

[Foreign("myClass")] 
public ClassA ClassA_E{get; set;} 
} 

добавить объект O1 из ClassA менеджеру объекта; и добавить объект O2 класса B в диспетчер объектов и установить свойство ClassA_E в O1. Все работает хорошо, но при проверке O1, O2 не проверяется.

ответ

3

EntityAspect.validateEntity WILL проверяет свойства навигации (приведенный ниже код был проверен на ветру 1.4.17).

Вы можете добавить свои собственные валидаторы в любое свойство навигации. В приведенных ниже примерах предполагается схема с типом сущностей «Заказчик» и «Заказ», где каждый клиент имеет свойство «заказы» нескалярного типа, и каждый «Заказ» имеет скаляр собственность «клиент».

В этом случае скалярный «клиент» навигация по типу заказа может быть валидатор зарегистрирован как это:

var orderType = em.metadataStore.getEntityType("Order"); 
var custProp = orderType.getProperty("customer"); 
// validator that insures that you can only have customers located in 'Oakland' 
var valFn = function (v) { 
     // v is a customer object 
     if (v == null) return true; 
     var city = v.getProperty("city"); 
     return city === "Oakland"; 
}; 
var customerValidator = new Validator("customerValidator", valFn, { messageTemplate: "This customer's must be located in Oakland" }); 
custProp.validators.push(customerValidator); 

где ошибка проверки будет создана вызовом

myOrder.entityAspect.validateEntity(); 

И «заказы» несакалярной навигации для типа «Заказчик» могут иметь регистратор, зарегистрированный следующим образом:

var customerType = em.metadataStore.getEntityType("Customer"); 
var ordersProp = customerType.getProperty("orders"); 
// create a validator that insures that all orders on a customer have a freight cost > $100 
var valFn = function (v) { 
    // v will be a list of orders 
    if (v.length == 0) return true; // ok if no orders 
    return v.every(function(order) { 
     var freight = order.getProperty("freight"); 
     return freight > 100; 
    }); 
}; 
var ordersValidator = new Validator("ordersValidator", valFn, { messageTemplate: "All of the orders for this customer must have a freight cost > 100" }); 
ordersProp.validators.push(ordersValidator); 

где ошибка проверки будет создан вызовом

myCustomer.entityAspect.validateEntity(); 
+0

Да, это верно. Теперь скажите, что у меня есть проверка объекта. Есть ли простой способ сделать это? Это предложение, которое, похоже, не работает для меня: http://stackoverflow.com/a/26675416/807223 – jpo

+0

В модели данных, скажем, я добавил определенное поле в объекте заказа по мере необходимости. например, требуется дата заказа. Теперь добавьте заказ на объект клиента. Теперь заказ принадлежит коллекции заказов, но добавленный заказ не имеет даты заказа. Должен ли ветер определить, что объект клиента недействителен? Кроме того, скажем, что между порядком и множеством элементов существует одно отношение ко многим, и порядок, в котором заказ может иметь несколько элементов, и каждый элемент имеет требуемое имя. Если я добавляю элемент и заказываю без имени и имени, должен ли бриз быть в состоянии определить, что объект клиента действителен? – jpo

Смежные вопросы