1

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

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)我的 SLN.Controllers.Context 类确实是 System.Data.Entity.DbContext 的子类,并且 2)我在产品(非测试)环境中没有收到此错误。

请注意,错误来自 Breeze.WebApi.dll 的 EFContextProvider 类,它提供了大部分服务器实现。EFContextProvider 类有一个我作为 SLN.Controllers.Context 传递的通用参数。EFContextProvider 实例必须实例化我的 Context(因为我没有),然后它必须尝试将其转换为 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;
    }
}

演员表在微风EFContextProvider类的 Context 属性中:

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;
  }
}
4

0 回答 0