Breeze验证实体及其导航属性

时间:2014-08-29 21:22:22

标签: validation breeze one-to-many

我可以使用代码entity.entityAspect.validateEntity()验证实体。但是,这不会验证导航属性。我的entiy与out实体有一对一和一对多的关系。我想验证实体及其导航属性。我怎么能用微风来做这件事?

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;}
}

我将ClassA的对象O1添加到实体管理器;并将classB的对象O2添加到实体管理器,并将属性ClassA_E设置为O1。一切正常但在验证O1时,O2没有得到验证

1 个答案:

答案 0 :(得分:3)

EntityAspect.validateEntity将验证导航属性(以下代码在breeze 1.4.17中进行了测试)。

您可以将自己的验证器添加到任何导航属性中:在下面的示例中,假设具有“客户”和“订单”实体类型的架构,其中每个客户具有非标量“订单”属性,并且每个“订单”具有标量“客户“财产。

在这种情况下,Order类型上的标量“customer”导航属性可能具有如下注册的验证器:

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();

“Customer”类型上的非标量导航属性“orders”可能有一个如下注册的验证器:

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();