0

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

我遇到的问题是我在 MySQL 服务器上执行此操作,我收到以下错误:

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

我环顾四周,注意到有些人必须在他们的连接字符串中启用 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" />

以前有没有人遇到过这个问题,如果有,您是如何解决的?我真的很感激我能得到的任何帮助!

4

1 回答 1

0

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

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

我使用该Include()语句执行预先加载以在一个查询中获取一个或两个子实体。如果我们说All()在 repo 中调用了一个返回 an的函数IQueryable,则可以执行以下操作:

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

这将创建一个查询,该查询会同时选择所有内容cities以及填充的users导航districts属性。一旦在消费代码中访问属性,将执行查询并返回 an 而不是 an ,后者将通过延迟加载进行ToList()枚举IEnumerableIQueryable

如果它是导致此问题的不同存储库功能,则以Include()类似的方式对其进行处理应该很简单。

于 2013-06-06T01:15:29.087 回答