EF 4.1 Code Première erreur – Le type d’entité SomeType ne fait pas partie du modèle pour le contexte actuel

Tout en travaillant avec le code EF d’abord, je reçois une erreur ci-dessous à différents moments:

Le type d’entité SomeType ne fait pas partie du modèle pour le contexte actuel.

Quelles sont les causes possibles de cette erreur?

Cela peut se produire parce que:

  • DbContext configuré avec une chaîne de connexion incorrecte
  • L’entité spécifiée n’est en fait pas mappée dans la configuration

Je l’ai eu quand ma classe qui a hérité de DbContext n’a pas déclaré le modèle comme une propriété. Par exemple, j’ai négligé d’append une propriété pour FooModel dans le code ci-dessous:

 public class MyDBContext : DbContext { public DbSet FooModels{ get; set; } // etc. ... } 

Ce message apparaît également si vous essayez de définir quelque chose comme EntityState sur une collection enfant dans une association un-à-plusieurs.

Par exemple; si une association un-à-plusieurs existe entre ParentEnt et ChildEnt dans l’extrait de code ci-dessous, le message d’erreur suivant s’affiche:

Le type d’entité Hash1Type ne fait pas partie du modèle pour le contexte actuel.

 MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged; 

La modification suivante ne génère pas d’erreur:

 MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged; 

Notez que l’utilisation de First() dans ce cas peut indiquer t

Cela peut également être causé par des propriétés sur votre POCO non nommé EXACTEMENT comme elles le sont dans EDMX / modelbuilder. S’il vous plaît voir mon post ici pour plus de détails sur la façon dont j’ai mal tourné le problème.

Le type d’entité ne fait pas partie du modèle pour le contexte actuel

J’ai eu cette erreur.

Il s’est avéré que j’avais ajouté un nouveau champ à une vue db quelques heures auparavant. J’ai mis à jour le contexte (dans le cadre de quelque chose d’autre que je faisais) et j’ai eu cette erreur.

Lorsque j’ai mis à jour le POCO, tout s’est bien passé: EF a jeté cette erreur car il ne pouvait pas mapper un champ dans la vue à une propriété dans le POCO de la vue.

Ce n’est pas le message d’erreur le plus utile dans cette situation IMO.

Cela peut arriver lorsque votre modèle n’est pas correctement associé à votre classe. Dans mon cas, j’ai eu cette erreur lorsque j’ai utilisé EF Model First et lorsque j’ai mis à jour mon modèle EDMX depuis DB, mais que je n’ai pas mis à jour ma classe Entity. Plus précisément, une propriété dans Entity était en minuscule dans DB et le diagramme EDMX dans Upper. Et un autre problème que j’avais était une propriété de modèle dans le diagramme EDMX n’a ​​pas été converti en mon application Enum de sorte que EF ne pouvait pas reconnaître cette entité.

J’ai commencé par faire de la firebase database et utiliser la génération de modèles intégrée pour mes modèles (EF 4.1)

J’ai copié le code généré dans un nouveau fichier et supprimé les propriétés de navigation. C’est à ce moment que j’ai commencé à voir cette erreur. J’ai le chargement paresseux désactivé, mais il semble que les propriétés de navigation sont toujours nécessaires dans le POCO.

Je suppose que l’erreur peut indiquer que votre modèle manque quelque chose.

 namespace TestApp.BLL { using System; using System.Collections.Generic; public partial class User { public User() { //this.Roles = new HashSet(); } public int UserId { get; set; } public ssortingng FirstName { get; set; } public ssortingng LastName { get; set; } public ssortingng UserName { get; set; } public ssortingng Password { get; set; } //public virtual ICollection Roles { get; set; } } } 

Le code ci-dessus montre les propriétés de navigation commentées. Si je les décomptes sur tous les POCO (cela signifie aussi le rôle POCO), l’exception disparaît.

METTRE À JOUR

Cette erreur a continué à m’attaquer avec diverses mises à jour que j’ai apscopes à la firebase database. Finalement, j’ai supprimé le fichier edmx et l’ai créé à nouveau avec les mêmes tables et procédures stockées.

Vieux

J’ai eu ceci quand l’entité générée manquait une colonne nullable:

 //------------------------------------------------------------------------------ //  // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. //  //------------------------------------------------------------------------------ namespace MyProgram.Models { using System; using System.Collections.Generic; public partial class Question { public int id { get; set; } public ssortingng title { get; set; } public ssortingng body { get; set; } public ssortingng tags { get; set; } public int votes { get; set; }//I had to manually add this property which is nullable int in the database } } 

J’ai ajouté la propriété après avoir généré le modèle initial. Cependant, j’ai même essayé de supprimer le tableau et de le recréer. Cela ne l’a pas réparé. Seul l’ajout de la propriété l’a corrigé manuellement pour moi.

Répondre à la question est “Quelles sont les causes possibles de cette erreur?”:

Cette erreur semble se produire chaque fois que le modèle interne / EDMX n’est pas correctement construit ou n’est pas complètement construit. Et il existe un grand nombre de causes potentielles à ce problème. Il est regrettable qu’il semble y avoir un signalement d’erreurs ou une détection des erreurs insuffisants lors de la création du modèle. Par conséquent, pour résoudre ce problème, il faut essayer un tas de choses pour voir ce qui fait disparaître le problème.

J’ai rencontré une autre instance de cette erreur au cours des derniers jours, en utilisant EF 6.0 (code pré-version actuel), code-first et conventions personnalisées. Il se trouve que la cause principale est que j’avais une convention personnalisée qui renomme l’ID EdmProperty (par exemple, ID -> MyTypeId). Si j’ai désactivé ma convention personnalisée, ce problème a disparu; Si j’ai activé ma convention, le problème se produit. Il n’y a pas de journalisation, d’exceptions ou d’autres erreurs pour indiquer qu’un problème est survenu lors de la construction du modèle. Cette exception ne fait pas son apparition jusqu’à ce que j’essaie d’append une entité à un DbSet. La convention n’a posé aucun problème lors de la génération de la firebase database (via Migrations).

Dans mon scénario, j’utilisais EF6 pour migrer une firebase database MySQL vers MSSQL. J’ai eu 2 modèles et contextes distincts, chacun avec sa propre chaîne de connexion. Les classes avaient le même nom, mais celle de MySQL était en minuscule et celle de MSSQL un en Pascal. J’avais copié dans les deux chaînes de connexion les assemblages correspondants contenant mes modèles EDMX. Mais quand j’ai exécuté mon application, j’ai reçu une erreur concernant l’une des 2 chaînes de connexion ayant déjà été ajoutée à la liste des dictionnaires.

J’ai donc supprimé l’entrée en conflit, pensant bêtement qu’elle avait en quelque sorte access à la chaîne de connexion dans l’app.config de l’assembly (il est tard!). Mais non, l’erreur était en réalité due au fait que les deux chaînes de connexion portaient le même nom – une en minuscule et une en Pascal – c’est-à-dire que la clé du dictionnaire ignore le casse-tête. Donc, lorsque j’ai supprimé celui de MySQL, il a ensuite tenté d’utiliser la chaîne de connexion MSSQL pour les deux modèles. J’ai donc dû rappend, renommer et définir manuellement la chaîne de connexion pour le second modèle dans le code.