9
votes

Framework d'entité: Il existe déjà un digne d'accès ouvert associé à cette commande qui doit être fermée en premier

Cette question est liée à Ceci :

ma méthode de référentiel contient ce code: p> xxx pré>

mon code HTML a ce code: p>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.applicantPosition.Applicant.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.applicantPosition.Position.name)
        </td>


0 commentaires

5 Réponses :


3
votes

N'utilisez généralement pas d'objet EF en vue, mais créez un objet POCO pour le modèle de vue et cartographier le résultat de la requête sur le modèle de vue. EF n'exécute pas la requête dans votre méthode de référentiel car la requête n'est pas exécutée au moment de la définition, mais uniquement lorsque vous essayez d'accéder aux données. Dans votre vue, vous utilisez la même requête plusieurs fois et cela n'est pas correct.

Si vous souhaitez accéder à la liste de l'objet renvoyé par votre méthode de référentiel, utilisez tolist


0 commentaires

23
votes

Solution rapide:

public IEnumerable<ApplicationPositionHistory> GetApplicationPositionHistories(int applicantId, int positionId)
    {
        return context.ApplicationsPositionHistory.Where(d => d.applicantPosition.ApplicantID == applicantId && d.applicantPosition.PositionID == positionId).Include(o => o.applicantPosition).ToList() ;
    }


1 commentaires

Cette même erreur s'est produite pour moi lorsque j'ai réimprimé deux classes modèles similaires pour hériter d'une classe de base de modèle utilisant une structure de héritage TPH, où il y avait une relation unique à zéro ou une sur l'une des classes dérivées, et j'étais Utilisation de la charge désireuse dans le contrôleur pour ce modèle. D'après ce que je comprends, le chargement impatient n'est pas pris en charge dans ce cas, alors laissez tomber le .include (...) pour cette propriété dans le contrôleur et ajoute .tolist () à la fin de mes autres .include (...) Les déclarations semblent avoir résolu le problème - merci.



1
votes

Le problème réel Si vous êtes paresseux charger la référence de position de l'entité candidatePaper avant que la requête ne termine cette exécution. Si vous souhaitez conserver l'exécution différée sur ce scénario, vous pouvez charger la référence de position sur votre requête comme celle-ci:

inclure (o => o.applicantposition.select (a => a.position));

et sur votre getApplicationPositionnésShistoires permet de retourner l'iSenumérable.

L'autre solution consiste à exécuter la requête sur la méthode GetApplicationPositionShistories appelant les méthodes Tolist () ou Toarrray () sur la requête.


0 commentaires

6
votes

Cette erreur se produit lorsqu'une nouvelle requête va être exécutée pendant que vous êtes à l'intérieur d'une autre requête. Considérez que vous avez quelque chose comme ceci à votre vue xxx pré>

et dans votre modèle de périphérique, vous avez p> xxx pré>

puis puis pour l'évaluation du périphérique.name It Nécessite de faire la requête sa marque et son modèle, il deviendra une requête interne à l'intérieur de la requête. La solution consiste donc à activer MutlipleAcTiverSultsUtsultsUltsultsultsultsultsultsUltsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsultsults, comme suit: P>

    <add name="MyDBContext" connectionString="Data Source=.;Initial Catalog=mydb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />


0 commentaires

12
votes

Avez-vous essayé d'ajouter multipléceptaiversultsettst = true; à votre chaîne de connexion?


1 commentaires

J'utilisais le contexte. .Find (id), lequel pour une raison quelconque entraîne l'erreur mentionnée par OP. Ajout de ce paramètre à la chaîne de connexion a résolu le problème.