ASP MVC4中的MVC Scaffold在访问页面时抛出错误(打开数据读取器和多个连接)

时间:2013-01-20 17:03:00

标签: c# mysql entity-framework entity-framework-4 asp.net-mvc-4

我已经生成了一个实体(City),现在我尝试根据本教程使用MVC Scaffold生成脚手架:http://www.codeproject.com/Articles/468777/Code-First-with-Entity-Framework-5-using-MVC4-and

我遇到的问题是我在MySQL服务器上这样做,我收到以下错误:

  

已经有一个与此Connection关联的开放DataReader   必须先关闭。

我环顾四周,注意到有些人必须在他们的连接字符串中启用MARS(多个活动结果集),但显然MySQL没有这样的参数。我也试过AllowBatch = True,但这也不起作用。这是我的连接字符串:

<add name="socialgeogroep6Entities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;AllowBatch=True;user id=socialgeogroep6;password=snow;database=socialgeogroep6&quot;" providerName="System.Data.EntityClient" />

之前是否有人遇到此问题,若然,您是如何解决的?我真的很感激我能得到任何帮助!

1 个答案:

答案 0 :(得分:0)

由于启用了延迟加载,我遇到了这个问题。您没有发布存储库代码,但我想知道此查询是否导致问题:

public ViewResult Index()
{
    return View(cityRepository.AllIncluding(city => city.users, city => city.districts));
}

我使用Include()语句执行预先加载以在一个查询中获取一个或两个子实体。如果我们说repo中有一个名为All()的函数返回IQueryable,可以这样做:

    // ...
    var allCities = cityRepository.All().Include("users").Include("districts").ToList();
    return View(allCities);
}

这会创建一个查询,一次性选择所有cities及其usersdistricts导航属性。 ToList()将执行查询并返回IEnumerable而不是IQueryable,一旦在使用代码中访问属性,这将通过延迟加载进行枚举。

如果它是导致此问题的不同存储库功能,那么以类似的方式将Include()工作到它应该是直截了当的。