BreezeJS中的Observable EntitySets / NavigationCollections

时间:2016-10-13 15:04:18

标签: wcf silverlight kendo-ui breeze ria

我们正在考虑使用BreezeJS作为我们当前的WCF Ria Services + Silverlight对的类似解决方案。在WCF Ria Services中,我们有包含EntitySet实例的客户端DataContext,这些实例将填充查询。 例如,我们的DomainService可能有三种方法,如下所述。假设用户与订单链接为1对多:

public IEnumerable<User> GetFirst10Users(){
   //retrieve from DB with EF
   return ObjectContext.Users.OrderBy(u => u.Id).Take(10);
}

public IEnumerable<User> GetLast10Users(){
   //retrieve from DB with EF
   return ObjectContext.Users.OrderByDesc(u => u.Id).Take(10);
}

public IEnumerable<Order> GetOrders(){
   //retrieve from DB with EF
   return ObjectContext.Orders;
}

因此,我们将在客户端为我们生成类似的内容:

public class Context{
    public EntitySet<User> Users {...};
    public EntitySet<Order> Orders {...};

    public EntityQuery<User> GetFirst10UsersQuery(){
    }

    public EntityQuery<User> GetLast10UsersQuery(){
    }

    public EntityQuery<Orders> GetOrdersQuery(){
    }
}

如果我们执行前两个查询,我们最终会在Users集合中结合其结果。执行第三个将在Orders集合中为我们提供所有订单,但是这些订单的子集将包含在客户端上的用户实例的导航集合中。它工作得很好,当实体被添加到Users集合(通过查询,或通过用户的操作,或其他视图模型的副作用)时,通过绑定到用户实体集上的ObservableCollection包装,它们立即显示在UI上。 这一点反映在取消更改上,我不需要为此做很多事情 - 只提供可观察的界面。

特别是BreezeJS和JS,看起来我应该订阅Breeze的各种事件并与我的Kendo UI可观察数组实例同步数据(实际上是在breeze cache和Kendo UI可观察数组之间复制数据)。 / p>

在WCF Ria Services中,Context.Users实体集具有EntityAdded / EntityDeleted事件,可以在ViewModel中处理添加/删除。

相同的事件也可用于NavigationCollections,因此我们可能会执行user.Orders.EntityAdded + = ...例如。

所以,我正在尝试使用TypeScript中的Angular + BreezeJS + Kendo UI实现类似于WCF Ria Services + Silverlight中的内容。我在Breeze中为EntitySet找到了EntityAdded / Deleted事件的类似物,但没有为NavigationCollections找到类似的东西。

如果我想尝试的路径在BreezeJS / KendoUI / Angular世界中完全尴尬,有人可以告诉我吗?如果不是,我如何处理BreezeJS中导航集合的变化?

0 个答案:

没有答案