web-dev-qa-db-fra.com

Entity Framework Nom de type dupliqué dans un assembly (6.1.0)

Je ne suis pas sûr de ce qui se passe mais je reçois toujours l'exception suivante lorsque je fais une requête. "Nom de type en double dans un assembly." Je n'ai pas pu trouver de solution sur le web. J'avais résolu le problème en supprimant le framework d'entité de tous les projets dans les solutions et en réinstallant à l'aide de nugget. Puis tout à coup, l'exception est de retour. J'ai vérifié mon schéma de table encore et encore et je ne trouve rien de mal à cela.

C'est la requête à l'origine de l'exception.

    var BaseQuery = from Users in db.Users
            join UserInstalls in db.UserTenantInstalls on Users.ID equals UserInstalls.UserID
            join Installs in db.TenantInstalls on UserInstalls.TenantInstallID equals Installs.ID
            where
                Users.Username == Username
                && Users.Password == Password
                && Installs.Name == Install
            select Users;

    var Query = BaseQuery.Include("UserTenantInstalls.TenantInstall");

    return Query.FirstOrDefault();

Comme je l'ai mentionné précédemment, la même requête fonctionnait auparavant. Les données n'ont pas changé et le code n'a pas changé.

43
CodeMilian

En guise de solution, cela ne se produit que si vous utilisez le débogueur en une seule étape. Si vous placez votre point d'arrêt quelques lignes plus loin dans votre source, l'erreur ne s'affichera pas.

Je n'ai pas désinstallé, et cela me permet au moins de continuer à travailler.

63
Chad Lehman

Il s'agit d'un nouveau problème avec EF 6.1.0, et l'équipe EF est consciente du problème:

https://entityframework.codeplex.com/workitem/2228

19
yohohoho

Face à la même chose dans mon WCF webservice récemment. Nettoyez simplement votre solution et reconstruisez-la. Cela devrait résoudre le problème.

12
Sandy

Rien de ce qui précède ne semble fonctionner pour moi, cependant, dans le lien spécifié plus tôt, je l'ai fait, ce qui a fonctionné pour moi. Cela a été soumis par 'bunomonteiro'

Pour corriger "Nom de type en double dans un assembly"

J'ai eu un problème similaire. J'ai vérifié tous mes modèles/classes et je n'ai pas utilisé de noms en double pour les types. J'ai supprimé les assemblys et régénéré le modèle et l'objet contextuel de la base de données et j'ai toujours eu le même problème.

Une trace produite dans Visual Studio "Les enfants n'ont pas pu être évalués". La SOLUTION consiste à ajouter .ToList (); ou ToArray (); ou ToDictionary () etc, à votre requête. etc.

par exemple. var query = context.TableName.Where (x => x.name == "CodeRealm"). ToList ();

PingBack - http://entityframework.codeplex.com/workitem/1898

bunomonteiro a écrit 18 juil à 03h37.

4
Steady

Cela semble être corrigé dans 6.1.3.

Voici comment j'arrive à cette conclusion:

J'ai reproduit ce problème de manière fiable dans une version précédente (probablement 6.1.2). La reconstruction de ma solution ne l'a pas corrigé. Le passage avec des points d'arrêt avant et après did reproduit le problème, tout en ayant uniquement des points d'arrêt after le point de l'exception did not provoque une exception, comme indiqué ici dans d'autres réponses. [Résumé: il me semble que j'ai le même problème que tout le monde avec l'ancienne version d'EF.]

Étant donné exactement les mêmes points d'arrêt et sans redémarrage ou quelque chose comme ça, je viens d'installer la mise à jour pour Entity Framework. Cela did corrige le problème, où je pouvais passer librement avec des points d'arrêt avant et après le "code de problème" sans qu'aucune exception ne soit levée.

Étant donné que le problème est un peu aléatoire et capricieux aux conditions, il est difficile de dire définitivement que la mise à jour d'EF traite spécifiquement du problème, mais jusqu'à présent tout va bien.

2
Yuri

Il s'avère que pour nous, un redémarrage du serveur était tout ce qu'il était.

0
Grandizer

Avec EF 6.1, je rencontre le même problème.

Dans mon cas, mon modèle a une table d'auto-référence. J'ai donc trouvé que cela pouvait être causé par les deux raisons suivantes.

  1. //Database.SetInitializer(null) Il suffit de commenter la ligne suivante dans le constructeur DBContext.
  2. garder la clé étrangère et sa propriété de navigation correspondante cohérentes, ou tout simplement garder la propriété de navigation nulle
0
user3884

Moi aussi, je faisais face à un problème similaire, je l'ai résolu en convertissant l'ensemble de résultats en Liste i.e

var registers = registerRepository.All.ToList (). Where (a => a.AreaLatitude.Equals (0));

La conversion du résultat ToList a résolu le problème pour l'itérer davantage.

et résolu le problème.

0
Ganesh Todkar

Eu le même problème qui a pris des heures hier pour se débarrasser. En utilisant EF 6.1.0, erreur lors de l'exécution de linq sur une requête d'entités similaire à celle ci-dessus. Ma solution consistait à arrêter IIS Express, nettoyer la solution, désinstaller EF de tous les projets dans la solution, fermer VS2012, supprimer tous les dossiers/fichiers de packages dans la solution, puis redémarrer VS2012, ajouter EF 6.1.0 où nécessaire, compilation, erreur disparue.

0
user3202925

Doit corriger le segment de code "sélectionnez Utilisateurs;":

var BaseQuery = from Users in db.Users
        join UserInstalls in db.UserTenantInstalls on Users.ID equals UserInstalls.UserID
        join Installs in db.TenantInstalls on UserInstalls.TenantInstallID equals Installs.ID
        where
            Users.Username == Username
            && Users.Password == Password
            && Installs.Name == Install
        select Users;

Code de correction:

select new { ID=Users.ID, F1= Users.forExampleField1,
             F2= UserInstalls.forExampleFild1, 
             F3= Installs.forExampleFild1 , 
             F4= Installs.forExampleFild2 };

La raison:

Les champs de clé étrangère dans la classe sont présents et "Linq" ne sont pas en mesure de les supprimer, il y avait l'erreur suivante:

Nom de type en double dans un assembly

(Bien sûr, ce problème Fault "framework d'entité"!)

Je suis une explication complète à ce sujet, mais malheureusement mon anglais n'est pas très bon et il m'est vraiment difficile d'expliquer la spécialisation, car je comprends que beaucoup de gens ne comprennent pas ce que je veux dire. Je m'en excuse.

0
Amin Ghaderi