Typescript breeze合并服务器实体

Typescript breeze合并服务器实体,typescript,breeze,Typescript,Breeze,以下是我的问题的主要支柱: 我已经在http上实现了一个请求-响应服务层。那个 是一个请求对象被发送到服务器,在那里它被处理,并且 然后将响应发送到客户端TypeScript/javascript。 请求对象和响应对象都可能包含breeze 实体。 从服务器收到响应后,如果 另外,在响应中包含的实体中,我需要更新 客户端缓存实体管理器。 控制器负责处理 请求处理用[BreezeController]标记,因此实体 就像微风所期望的那样。请求和答复 它们本身不是实体。 我试图在breeze ent

以下是我的问题的主要支柱:

我已经在http上实现了一个请求-响应服务层。那个 是一个请求对象被发送到服务器,在那里它被处理,并且 然后将响应发送到客户端TypeScript/javascript。 请求对象和响应对象都可能包含breeze 实体。 从服务器收到响应后,如果 另外,在响应中包含的实体中,我需要更新 客户端缓存实体管理器。 控制器负责处理 请求处理用[BreezeController]标记,因此实体 就像微风所期望的那样。请求和答复 它们本身不是实体。 我试图在breeze entity manager?中找到一个方法,如果我传递从服务器检索到的实体列表,这些实体将用于更新本地缓存,但我没有找到任何方法。在研究了源代码之后,我在breeze库中做了一些更改,在那里我公开了MappingContext内部类,并执行了以下TypeScript代码:

public processEntityRequestAsync<TResponse>(request: requestModel.RequestBase): Q.Promise<TResponse> {
  var promise = this.requestProcessor.processRequest<TResponse>(request);
  var processedPromise = promise.then(r => {
    // TODO everything in this method is a hack using internal things from breeze
    // to update the entities after getting them from server
    var updatedEntities = <any[]>(<any>r).UpdatedEntities;
    if (updatedEntities) {
      var dataService = <breeze.DataService>(<any>breeze.DataService).resolve([{
        serviceName: this.manager.dataService.serviceName,
        adapterName: "WebApi",
      }]);
      var mappingContext = new (<any>breeze).MappingContext({
        query: null, // tells visitAndMerge that this is a save instead of a query
        entityManager: this.manager,
        mergeOptions: { mergeStrategy: breeze.MergeStrategy.OverwriteChanges },
        dataService: dataService,
      });

      // Note that the visitAndMerge operation has been optimized so that we do not actually perform a merge if the 
      // the save operation did not actually return the entity - i.e. during OData and Mongo updates and deletes.
      updatedEntities = mappingContext.visitAndMerge(updatedEntities, { nodeType: "root" });
    }
    return r;
  });
  return processedPromise;
}
注意:转换用于绕过Typescript类型检查并使用breeze内部构件


这是可行的,但是我不喜欢我必须使用breeze内部构件,并且我必须为此修改库。有没有更好的方法来实现我的目标?

我不完全确定我是否理解这个问题,但看看关于JsonResultsAdapter的讨论:


其思想是,可以在客户机上使用JsonResultAdapter将任何json数据强制转换为实体,这些实体将合并到EntityManager中

这是真的,但是我有一个真正的Breeze实体列表,我想使用WebApi Json适配器并使用Breeze拥有的所有功能将其导入客户端缓存。正如我所看到的,合并一点也不琐碎,所以为什么不使用我认为安全的实现呢。jsonResultsAdapter不处理合并,它只是告诉Breeze如何将json对象转换为实体。合并由breeze在此步骤之后提供。实现jsonResultsAdapter并不是那么困难。看看源代码,大多数适配器的代码都少于30行。我有一个类似的问题,在[此][breeze文档]页面的末尾有一个小部分可能会有所帮助。但是我尝试了这种方法,但没有成功,因为我在合并过程中遇到了一些错误,但值得一看。