gpt4 book ai didi

c# - Entity Framework 已经有一个打开的 DataReader 与此命令关联,必须先将其关闭

转载 作者:行者123 更新时间:2023-11-30 13:30:10 25 4
gpt4 key购买 nike

我正在为上述错误而苦苦挣扎。我在这里找到了不同的答案(堆栈溢出),但它们都没有解决我与错误相关的问题。

我只是在我的 ConnectionString 中启用了 MARS,但没有成功。

我有一个类产品

public class Product
{
public Product()
{
this.Additives = new HashSet<Additive>();
}

public int Id { get; set; }
public string Name { get; set; } // refrigerante
public string CommercialName { get; set; } // nome popular, ex: fanta laranja
public string Brand { get; set; } // marca, ex: Coca-cola
public string Details { get; set; } // composicao, ingredientes
public HalalState HalalState { get; set; } // estado: halal, haram ou desconhecido
public DateTime? LastUpdate { get; set; } // date e hora do registo

public virtual ICollection<Additive> Additives { get; set; } // aditivos
public int ProviderID { get; set; }
}

和 Additive 类代表产品中的添加剂

using System;
using System.Collections.Generic;

namespace Teknowhow.EatHalal.Core.Models
{
public class Additive
{
public Additive()
{
this.Products = new HashSet<Product>();
}

public int Id { get; set; }
public string Key { get; set; } // codigo ex: E130
public string NamePT { get; set; } // nome ex: Acido ascorbico (Vitamina C) em portugues
public string NameEN { get; set; } // nome ex: Acido ascorbico (Vitamina C) em inglês
public string Details { get; set; } // detalhes sobre o aditivo, incluindo.
public HalalState HalalState; // estado: halal, haram ou desconhecido
public DateTime? LastUpdate { get; set; } // date e hora do registo

public virtual ICollection<Product> Products { get; set;}
}
}

我正在编写代码来实现 ProductRepository 上的方法,以便获得具有特定添加剂的产品。

public ICollection<Product> GetProductsByAdditive(string key)
{
var products = context.Products;
var productsAdditives = new List<Product>();

foreach (var p in products)
{
var additives = p.Additives;

foreach (var a in additives)
{
if (a.Key.Equals(key))
productsAdditives.Add(p);

}
}

return productsAdditives.ToList();
//TODO: um Metodo úinico que permite pesquisa por nome em PT e EN e codigo

}

错误恰好发生在第一个 foreach 循环之后,在这个语句上:

var additives = p.Additives;

PS:我使用的是 EF 6。我堆积了!请帮忙!

这是我的联系人

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<connectionStrings>
<add name="EatHalal"
providerName="System.Data.SqlClient"
connectionString="Server=192.168.1.150;Database=EatHalal;User Id=user;Password=password;MultipleActiveResultSets=true;"
/>
</connectionStrings>
</configuration>

最佳答案

您可以尝试如下所示。

注意:必须先带数据再做映射,不会有这个问题。

原因: 当您遍历查询结果 (IQueryable) 时,您将在迭代中触发加载实体的延迟加载。换句话说,在单个连接上执行多个数据检索命令。

         foreach (var p in products.ToList())
{
var additives = p.Additives.ToList();

foreach (var a in additives)
{
if (a.Key.Equals(key))
{
productsAdditives.Add(p);
}
}
}

关于c# - Entity Framework 已经有一个打开的 DataReader 与此命令关联,必须先将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39393164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com