为什么Breeze.WebApi.EFContextProvider无法强制转换到DbContext?

为什么Breeze.WebApi.EFContextProvider无法强制转换到DbContext?,breeze,dbcontext,Breeze,Dbcontext,我使用breeze通过实体框架服务器访问数据——基本上是breeze的默认设置。在测试中,我发现以下运行时服务器错误: System.InvalidCastException: Unable to cast object of type 'SLN.Controllers.Context' to type 'System.Data.Entity.DbContext'. at Breeze.WebApi.EFContextProvider`1.get_Context() 这是非常奇怪的,因

我使用breeze通过实体框架服务器访问数据——基本上是breeze的默认设置。在测试中,我发现以下运行时服务器错误:

System.InvalidCastException: Unable to cast object of type 'SLN.Controllers.Context' to type 'System.Data.Entity.DbContext'.
    at Breeze.WebApi.EFContextProvider`1.get_Context()
这是非常奇怪的,因为1 my SLN.Controllers.Context类是System.Data.Entity.DbContext的子类,2我在产品非测试环境中没有遇到此错误

请注意,错误来自Breeze.WebApi.dll的EFContextProvider类,该类提供了大部分服务器实现。EFContextProvider类有一个通用参数,我将其作为SLN.Controllers.Context传递。EFContextProvider实例必须实例化我的上下文,因为我没有,然后它必须尝试将其强制转换为System.Data.Entity.DbContext

这个演员怎么会失败呢?它如何在非测试中工作,但在测试中失败

更新

对于每个请求,下面是我的代码中与运行时错误相关的部分

public class Context : DbContext {...}

[BreezeController]
public class TruDBController : ApiController
{
    private class ContextProvider : EFContextProvider<Context>
    {
       ...
    }

    private readonly EFContextProvider<Context> _contextProvider = new ContextProvider();

    private EFContextProvider<Context> Provider 
    {
        get {return _contextProvider;}
    }

    [HttpGet]
    public IQueryable<Models.Table1> Table1()
    {
        // error occurs on get of Context from Provider
        return Provider.Context.Table1;
    }
}

你能显示你的控制器中的强制转换发生在哪里吗?当你陷入困境时,当它失败时,CreateContext产生的_上下文是什么类型的?我下载了breeze DLL的源代码。我将该项目添加到我的解决方案中。我的测试成功了!因此,只要我构建breeze DLL,我的测试就会通过。但是如果我使用预构建的DLL,它们就会失败。为什么呢?可能是由于EntityFramework DLL的版本不同。虽然这并不能解释为什么我作为非测试运行时没有收到错误。我想我需要决定是否总是构建breeze DLL。
public T Context {
  get {
    if (_context == null) {
      _context = CreateContext();
      // Disable lazy loading and proxy creation as this messes up the data service.
      if (typeof(ObjectContext).IsAssignableFrom(typeof(T))) {
        var objCtx = (ObjectContext)(Object)_context;
        objCtx.ContextOptions.LazyLoadingEnabled = false;
      } else {
        var dbCtx = (DbContext)(Object)_context; // HERE??
        dbCtx.Configuration.ProxyCreationEnabled = false;
        dbCtx.Configuration.LazyLoadingEnabled = false;
      }
    }
    return _context;
  }
}