gpt4 book ai didi

mysql - 已经有一个与此连接关联的打开的 DataReader

转载 作者:行者123 更新时间:2023-11-29 04:10:55 28 4
gpt4 key购买 nike

我使用 EF+MySql,数据库包含两个 foriegnkey,当我运行我的项目时,它说:已经有一个打开的 DataReader 与此连接关联,必须先关闭,然后我将 MultipleActiveResultSets=true 添加到连接字符串在web.config中,我再试一次,它告诉我:初始化字符串的格式不符合规范,我怎么能解决这个问题?代码定义foriegnkey和错误的初始化代码如下:

#region EDM 关系源元数据

[assembly: EdmRelationshipAttribute("blogModel", "cid", "cls", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(blog.Models.cls), "news", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(blog.Models.news), true)]
[assembly: EdmRelationshipAttribute("blogModel", "uid", "users", System.Data.Metadata.Edm.RelationshipMultiplicity.One, typeof(blog.Models.users), "news", System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(blog.Models.news), true)]

#endregion

#region 导航属性

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[EdmRelationshipNavigationPropertyAttribute("blogModel", "cid", "cls")]
public cls cls
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<cls>("blogModel.cid", "cls").Value;
}
set
{
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<cls>("blogModel.cid", "cls").Value = value;
}
}
/// <summary>
/// 没有元数据文档可用。
/// </summary>
[BrowsableAttribute(false)]
[DataMemberAttribute()]
public EntityReference<cls> clsReference
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<cls>("blogModel.cid", "cls");
}
set
{
if ((value != null))
{
((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<cls>("blogModel.cid", "cls", value);
}
}
}

/// <summary>
/// 没有元数据文档可用。
/// </summary>
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[EdmRelationshipNavigationPropertyAttribute("blogModel", "uid", "users")]
public users users
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<users>("blogModel.uid", "users").Value;
}
set
{
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<users>("blogModel.uid", "users").Value = value;
}
}
/// <summary>
/// 没有元数据文档可用。
/// </summary>
[BrowsableAttribute(false)]
[DataMemberAttribute()]
public EntityReference<users> usersReference
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<users>("blogModel.uid", "users");
}
set
{
if ((value != null))
{
((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<users>("blogModel.uid", "users", value);
}
}
}

#endregion


public partial class blogEntities : ObjectContext
{
#region 构造函数

/// <summary>
/// 请使用应用程序配置文件的“blogEntities”部分中的连接字符串初始化新 blogEntities 对象。
/// </summary>
public blogEntities() : base("name=blogEntities", "blogEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

/// <summary>
/// 初始化新的 blogEntities 对象。
/// </summary>
public blogEntities(string connectionString) : base(connectionString, "blogEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

/// <summary>
/// 初始化新的 blogEntities 对象。
/// </summary>
public blogEntities(EntityConnection connection) : base(connection, "blogEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

#endregion

最佳答案

据我所知,MultipleActiveResultSets 在 MySql 上不可用,因此您不能将它添加到连接字符串(它用于 MS SQL)。

这个问题的原因很可能是延迟加载。您正在迭代某些查询的结果,同时您访问循环内未加载的导航属性。这需要执行额外的查询,并且该查询需要一个新的数据读取器(第一个仍未关闭,因为您只是在迭代其结果集)。

解决方法:

  • 使用 ToListAsEnumerable
  • 将要迭代的查询的整个结果集具体化
  • 或者使用 Include
  • 预先加载您想在循环内使用的导航属性

关于mysql - 已经有一个与此连接关联的打开的 DataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289099/

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