[英]Entity Framework 6 and MySql error in double looping select and datareader
我正在观看一个视频课程,以学习有关EF 6 + MySql的知识,到目前为止,这很容易,但是现在我遇到了一个简单的代码问题,我花了8h的时间,但是还没有解决方案。 错误出现在“ cli.contatos”中的第二个Foreach上:
var db = new apagartesteentityEntities(); // create model
// runs the read on "clientes" table
foreach (var cli in db.clientes)
{
Console.WriteLine(cli.NomeClientes);
// runs a read in "contatos" table looking for relations
foreach (var cont in cli.contatos) {// <--error
Console.WriteLine(cont.TipoContato);
Console.WriteLine(cont.ValorContato);
}
}
Console.Read();
因此,这里的代码与视频课程完全相同,但是“老师”使用SqlServer,而我使用MySql。 “例外”表示已经打开了一个DataReader,必须将其关闭,但这对我没有帮助。
-我已经更新了MySql连接器和MySql Visual Studio-已经覆盖了dll-已经开始从nuget更新EntityFramework,MySql.Data,MySql.Entity的项目,然后再创建模型。
我现在开始使用EF 6,因此对您的帮助将不胜枚举。 谢谢
SQL Server支持一种称为“多个活动结果集”(MARS)的功能,MySQL不支持此功能,因此,您将看到错误。 您需要打开第二个连接并在内环中运行第二个查询。
谢谢! 我永远不会奇怪这样的事情! 看,我按照您的意思做了,并更改了代码,所以现在我猜它可以正常工作(直到现在可以),如果您有暗示可以接受,我还不是程序员,我什至不会说英语,但实际上谢谢! 我将“回答”中间注释,以便为可能需要它的其他人显示代码。
var db = new apagartesteentityEntities();
contatos con = new contatos();
foreach (var cli in db.clientes)
{
Console.WriteLine("Nome do cliente: "+ cli.NomeClientes);
//第二个模型/连接位于“使用中”,因此它在循环中“死亡”(我猜)
using(var db2 = new apagartesteentityEntities())
{
// MySql Nao suporta MARS (multiple actives result set)
foreach (var cont in db2.contatos)
{
if (cont.IdClientes == cli.IdClientes) { // reads IF the FK matches the PK
Console.WriteLine("Tipo contato: "+cont.TipoContato);
Console.WriteLine("Valor do contato: "+cont.ValorContato);
}
}
}
Console.WriteLine("--------------------");
}
Console.Read();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.