我已经生成了一个实体(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="server=localhost;AllowBatch=True;user id=socialgeogroep6;password=snow;database=socialgeogroep6"" providerName="System.Data.EntityClient" />
之前是否有人遇到此问题,若然,您是如何解决的?我真的很感激我能得到任何帮助!
答案 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
及其users
和districts
导航属性。 ToList()
将执行查询并返回IEnumerable
而不是IQueryable
,一旦在使用代码中访问属性,这将通过延迟加载进行枚举。
如果它是导致此问题的不同存储库功能,那么以类似的方式将Include()
工作到它应该是直截了当的。