2012-07-02 70 views
1

我使用EF + MySql,數據庫包含兩個foriegnkey,當我運行我的項目時,它會說:已經有一個與此連接關聯的打開DataReader,必須先關閉它,然後我添加MultipleActiveResultSets = true連接字符串在web.config中,我再試一次,它顯示我:初始化字符串的格式不符合規範,我怎麼可以 解決這個問題?代碼某種固定foriegnkey和錯誤的初始化代碼列表如下:已經有一個與此連接關聯的打開的DataReader

#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 

回答

3

據我所知MultipleActiveResultSets不可MySql上,所以你不能把它添加到連接字符串(它是MS SQL)。

這個問題的原因很可能是延遲加載。您正在迭代某個查詢的結果,並且同時訪問循環內未加載的導航屬性。這需要執行額外的查詢,並且該查詢需要新的數據讀取器(第一個尚未關閉,因爲您只是迭代其結果集)。

解決辦法:

  • 無論是使用ToList或materiealize整個結果集要迭代查詢或許也AsEnumerable
  • 還是要通過使用Include內循環使用貪婪加載導航性能
+0

thanx爲你的幫助,因爲我是在MVC beginer,所以你會發布我的示例代碼(如何使用包括)? –

3

對每個DataReader使用不同的打開和關閉SQL連接名稱。這將解決問題。

由於您正在爲VB.NET中的SQL服務器不支持的多個DataReader使用相同的打開和關閉數據庫連接。

相關問題