0

エンティティ(City)を生成しましたが、次のチュートリアルに従ってMVC Scaffoldを使用してスキャフォールディングを生成しようとしました:http://www.codeproject.com/Articles/468777/Code-First-with-Entity-Framework-5-使用-MVC4-および

私が抱えている問題は、MySQLサーバーでこれを実行していることであり、次のエラーが発生します。

この接続に関連付けられている開いているDataReaderがすでにあり、最初に閉じる必要があります。

周りを見回して、接続文字列で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()て熱心な読み込みを実行し、1 つのクエリで 1 つまたは 2 つのサブエンティティを取得します。All()を返すレポで呼び出される関数があるとすればIQueryable、次のようなことができます。

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

これにより、入力されたナビゲーション プロパティcitiesとともにすべてを一度に選択するクエリが作成されます。はクエリを実行し、消費コードでプロパティにアクセスすると、遅延読み込みによって列挙される ではなく を返します。usersdistrictsToList()IEnumerableIQueryable

この問題の原因が別のリポジトリ機能である場合Include()、同様の方法で作業するのは簡単です。

于 2013-06-06T01:15:29.087 に答える