是否有其他人尝试在多个EF模型的多个Api控制器的解决方案中使用Breeze.js的服务器端组件?
我发现在一个上下文中调用MetaData端点之后,在其他上下文中对MetaData端点的所有后续调用都会从被调用的第一个上下文返回MetaData,例如说我有两个Api控制器,每个都有自己的MetaData端点:
public class CoreController : ApiController
{
readonly EFContextProvider<CoreEntities> contextProvider = new EFContextProvider<CoreEntities>();
}
public class FormsController : ApiController
{
readonly EFContextProvider<FormsEntities> contextProvider = new EFContextProvider<FormsEntities>();
}
调用〜/ Core / MetaData将返回Core模型的JSON,但是后续调用〜/ Forms / MetaData将不会返回Forms JSON,而是返回Core元数据。如果我反过来调用它们,我会同时获得Forms元数据,这个问题似乎会持续存在,直到主机进程被回收。
我可以确认我能够按预期访问两个模型中的对象数据,所以我怀疑这是一个路由问题。
也许有人可以告诉我,在某些需要禁用的地方是否有某些缓存?
此致
汤姆特雷根娜答案 0 :(得分:2)
好的,这应该在Breeze 0.73.4中修复,可以通过微风网站上的nuget或zips获得。
答案 1 :(得分:1)
你是对的。我已经测试了这个问题,你报告的这种行为发生了。为两个控制器的每个Metadata()
方法设置断点,并使用Fiddler,我得出结论这不是路由问题。两个控制器使用不同的Context(contextProvider
的属性),但始终返回被调用的第一个元数据。我想这是Breeze的图书馆问题。我已经阅读了Breeze的文档,但我没有找到任何可以提供帮助的文章。
答案 2 :(得分:0)
还有另一个相同症状的问题。它与连接字符串中对Entity Framework元数据的模糊引用有关。我有两个单独的EDMX文件,这两个文件都被命名为Model.edmx(单独的项目)。当我引用包含第二个EDMX文件的程序集时,下面的连接字符串变得模糊不清 - 来自两个EDMX文件的元数据文件符合描述。
metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;
我能够通过重命名其中一个EDMX文件来解决问题。
另一种解决方案是用包含嵌入元数据的程序集的全名替换星号 - 这样做实际上有一个性能优势。有关详细信息,请参阅涵盖Entity Framework connection strings的MSDN文档。
assemblyFullName
包含嵌入资源的程序集的全名。名字 包括简单名称,版本名称,支持的文化和公共 关键,如下:
ResourceLib,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
资源可以嵌入到可以访问的任何程序集中 应用
如果为assemblyFullName指定通配符(*),则为Entity Framework运行时将搜索以下资源 地点,按此顺序:
调用程序集。
引用的程序集。
应用程序的bin目录中的程序集。
如果文件不在其中一个位置,则会出现例外情况 抛出。
Cc716756.note(zh-cn,VS.100).gif注意:使用通配符(*)时, 实体框架必须查看所有资源的程序集 用正确的名字。要提高性能,请指定程序集 名称而不是通配符。