实体框架DbContext对象处置

时间:2015-10-27 14:53:31

标签: entity-framework-6 asp.net-web-api2

环境:EF 6.0,SQL 2012,WebAPI 2

方法1:使用块

  using(MyEntities Test= new MyEntities ())
              {
                     var wareData = Test.WareTypes.ToList(); //Here the actual DBConnect and data fetching happens, i hope i m correct
                     return Request.CreateResponse<IEnumerable<WareType>>(HttpStatusCode.OK, wareData);
                }

无论ProxyCreation标志的状态如何,这些方案都适用

如果我返回

则失败
  • 这样的整个数据模型
  • 明确地返回整个数据模型 指定需要包含的实体
  • 使用DTO并在没有显式列表转换的情况下返回

只有在使用

时才会有效
  • DTO ..将其转换为List并将其返回。

方法2:不使用块

 MyEntities Test= new MyEntities ();
           var wareData = Test.WareTypes; //Here the actual DBConnect and data fetching happens, i hope i m correct
           return Request.CreateResponse<IEnumerable<WareType>>(HttpStatusCode.OK, wareData);

使用这种方法,无论有没有ProxyCreation标志,结果都会略有不同。但这里只有对象处理错误消息没有出现。

问题:设定:

  • 已启用代理创建
  • 代码附于“使用”块,如方法1
  • 返回整个数据模型并明确指定实体 需要包括哪些
  • 使用块将数据转换为List(确保DB操作已完成)

预期结果: 自引用循环(如果我不像方法2中那样包含代码,我会得到它) 实际输出: DbContext对象与自引用循环错误一起处理

有兴趣知道此行为的解释....

P.S: 有工作解决方案....问题更多的是理解这个概念..

0 个答案:

没有答案