多个模型的元数据问题&微风上下文

时间:2012-11-24 11:59:38

标签: asp.net-mvc asp.net-web-api metadata breeze

是否有其他人尝试在多个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元数据,这个问题似乎会持续存在,直到主机进程被回收。

我可以确认我能够按预期访问两个模型中的对象数据,所以我怀疑这是一个路由问题。

也许有人可以告诉我,在某些需要禁用的地方是否有某些缓存?

此致

汤姆特雷根娜

3 个答案:

答案 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注意:使用通配符(*)时,   实体框架必须查看所有资源的程序集   用正确的名字。要提高性能,请指定程序集   名称而不是通配符。