在我的应用计划中,有一个中央缓存模块。在这个模块中,我称之为上下文,其中大约有20个。每个Context都管理它自己的一组我称之为Inject对象(可能是Breeze称之为Entities),它包含应用程序中特定函数使用的值。每个上下文就像包装缓存模块中自己的小DB一样。
我的主要问题是Breeze教程讨论了包装其自己的EntityManager的DataContext,它看起来与我的Context类似,但除了简要提及之外我无法获得更多信息。 DataContext只是一个概念还是Breeze API中的实际对象?
答案 0 :(得分:2)
在我们的客户端JavaScript应用程序中,我们经常编写一个模块,将ViewModels与Breeze EntityManager
隔离开来。这样的模块在一个样本中可能被称为“dataservice.js”;它可以在另一个样本中被称为“datacontext.js”。这个概念是一样的:您正在尝试封装数据访问细节(涉及BreezeJS组件,如EntityManager
),以便ViewModel可以使用更简单,更有意的界面。
这些JS模块不是Breeze的一部分。它们仅仅是构建应用程序的推荐方法。
您可以根据需要编写这些“datacontexts”的多种口味。每个实例都可以拥有自己的EntityManager
实例,它可以缓存自己的实体集,如果您愿意,可以将该缓存视为“较小[在内存中]数据库”。对于不同的工作流程,这种“情境化”在商业应用中非常常见。你会看到我们谈论“沙盒编辑器”,例如;每个沙箱都是它自己的“上下文”。
您经常需要将实体从一个“上下文”复制到另一个“上下文”(而不是往返于服务器)。使用EntityManager.exportEntities
和EntityManager.importEntities
方法很容易做到这一点。您可以在 DocCode示例中找到示例。
答案 1 :(得分:0)
Breeze目前提供两个服务器端实现,包含“概念”上下文。 EFContextProvider 用于包装EF DbContext或ObjectContext,以及可用于包装任何对象集合的基本 ContextProvider 。在breeze samples zip中有一个名为“NoDb”的示例,它显示了如何使用ContextProvider简单地包装可查询对象的集合。 Breeze.WebApi项目中的这两个类可以在breeze下载页面的任何拉链中找到。
同样,NoDb样本和相关文档应该使这个概念更清晰一些。