DbContext没有处理

时间:2014-08-13 01:48:41

标签: c# entity-framework-6

我有一个测试,我希望失败,但它没有:

   [TestMethod]
    public void FillListOfSecurityExchangesRepository()
    {
      var qry = new SecurityExchangeQueryContext
      {
           QueryType = SecurityExchangeQueryType.FillAllWithMarketsAndStocks
      };
      using (var ctx = new EquitiesDbContext())
      {
          var r = new SecurityExchangeRepository(ctx);
          r.Read(qry);
          r.Dispose();
      }
      Assert.IsTrue(qry.Exchanges.Count > 0);    
   }

我希望这会失败,因为在存储库中我没有在查询上调用ToList,然后在返回时我调用Dispose of context。

(我实际上在上面的代码中冗余地调用了两次,因为它没有失败,只有r.Dispose()反过来处理上下文。)

以下是存储库调用的Read方法:

    protected virtual void FillAllWithMarketsAndStocks(SecurityExchangeQueryContext qctx)
    {
        this.Fill(() => qctx.Exchanges.AddRange(this.DbSet.OrderBy(exch => exch.Name).Include("StockMarkets.Stocks")),
            "void FillAllWithMarketsAndStocks(SecurityExchangeQueryContext qctx) failed.");
    }

(有一些用抽象类抽象出来但没有任何影响上下文的东西。)

由于我在没有ToList的情况下调用this.DbSet.OrderBy,因此每个Exchange仍必须引用上下文的DbSet Exchange。

所以我预计它会失败,因为在TestMethod中我没有做Assert / Count直到我处理了Context但它继续通过。使用Watch我可以看到Context仍然存在并且即使在退出using块之后也会踢。我也可以访问Exchange的属性,因此它不仅仅是Collection中的随机blob。

 var sm = qry.Exchanges[0].StockMarkets.First();

0 个答案:

没有答案