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 インスタンスは、コンテキストをインスタンス化する必要があり (私はインスタンス化していないため)、それを 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