EF 4.1 Code première erreur - le type d'entité SomeType ne fait pas partie du modèle pour le contexte actuel
en travaillant d'abord avec le code EF, j'obtiens l'erreur indiquée ci-dessous à des moments différents:
le type d'entité SomeType ne fait pas partie du modèle pour le contexte actuel.
Quelles sont les causes possibles de cette erreur?
10 réponses
il 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 en configuration
j'ai obtenu cela 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'ajouter une propriété pour FooModel dans le code ci-dessous:
public class MyDBContext : DbContext
{
public DbSet<FooModel> FooModels{ get; set; }
// etc. ...
}
ce message apparaît également si vous essayez de faire quelque chose d'un tel ensemble un EntityState sur une collection d'enfants dans une association un-à-plusieurs.
par exemple; s'il existe une association un-à-plusieurs entre le parent et L'enfant dans l'extrait de code ci-dessous, le message d'erreur:
le type d'entité Hash1Type ne fait pas partie du modèle pour le contexte actuel.
MyDbContext.Entry(ParentEnt.ChildEnt).State = EntityState.Unchanged;
le changement suivant Ne ne pas produire une erreur:
MyDbContext.Entry(ParentEnd.ChildEnt.First).State = EntityState.Unchanged;
noter que l'utilisation de First()
dans ce cas peut indiquer t
cela peut aussi être causé par des propriétés sur votre POCO qui ne sont pas nommées exactement comme elles sont dans L'EDMX/modelbuilder. Veuillez voir mon post ici pour plus de détails sur la façon dont j'ai de la difficulté à coup le problème.
le type d'entité
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.
quand j'ai mis à jour le tout POCO était bien: EF a jeté cette erreur parce qu'il ne pouvait pas mapper un champ dans la vue à une propriété dans le POCO de la vue.
Pas le plus de message d'erreur utile dans cette situation de l'OMI.
cela peut arriver quand votre modèle n'est pas correctement mappé à votre classe. Dans mon cas, j'ai eu cette erreur lorsque J'ai utilisé EF Model pour la première fois et lorsque j'ai mis à jour mon modèle EDMX à partir de DB mais que je n'ai pas mis à jour ma classe Entity. Plus précisément, une propriété dans Entity était en minuscules tandis que dans le diagramme de DB et D'EDMX était en majuscules. Et un autre problème que j'ai eu était une propriété modèle dans le diagramme D'EDMX n'a pas été converti à mon application de sorte que EF ne pouvait pas reconnaître cette entité.
j'ai fait la base de données d'abord et en utilisant la génération de modèle intégrée pour mes modèles (EF 4.1)
j'ai copié le code généré dans un nouveau fichier et j'ai supprimé les propriétés de navigation. C'est quand j'ai commencé à voir cette erreur. J'ai désactivé le chargement paresseux, mais il semble que les propriétés de navigation sont encore nécessaires dans les POCO.
je suppose que l'erreur pourrait 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<Role>();
}
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
//public virtual ICollection<Role> Roles { get; set; }
}
}
le code ci-dessus indique les propriétés de navigation commentées. Si je les décommente sur tous les POCO (cela signifie le rôle POCO aussi) l'exception disparaît.
mise à JOUR
cette erreur a continué à m'attaquer avec diverses mises à jour que j'ai faites à la base de données. Finalement j'ai supprimé le fichier edmx et je l'ai créé à nouveau avec les mêmes tables et procs stockés.
Vieux
j'ai obtenu ceci quand l'entité générée manquait une colonne nullable:
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MyProgram.Models
{
using System;
using System.Collections.Generic;
public partial class Question
{
public int id { get; set; }
public string title { get; set; }
public string body { get; set; }
public string 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é le bien après générer le modèle initial. Cependant, j'ai même essayé de supprimer la table et de la recréer. Qui n'ont pas le fixer. Seulement l'ajout de la propriété 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 construit avec succès, ou n'est pas complètement construit. Et il y a un grand nombre de causes potentielles à ce problème. Il est regrettable qu'il semble y avoir un nombre insuffisant de rapports d'erreur ou de détection d'erreur lors de la construction du modèle, donc la résolution semble impliquer d'essayer un tas de choses pour voir ce qui fait que le problème va loin.
je suis tombé sur une autre instance de cette erreur au cours des derniers jours, en utilisant EF 6.0 (actuellement le code de pré-publication), code-first, et conventions personnalisées. Il s'avère que la cause racine est que j'avais une convention coutumière qui renomme L'ID EdmProperty (par exemple ID -> MyTypeId). Si j'ai désactivé ma convention douanière, ce problème s'estompe; 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 s'est produit quand la construction du modèle. Cette exception ne se relève pas tant que je n'ai pas essayé d'ajouter une entité à un DbSet. La convention n'a posé aucun problème lors de la génération de la base de données (via les Migrations).
dans mon scénario, J'utilisais EF6 pour migrer une base de données MySQL vers MSSQL. J'avais 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 toute en minuscules et celle de MSSQL en Pascal. J'avais copié dans les deux chaînes de connexion des assemblages pertinents contenant mes modèles EDMX. Mais quand j'ai lancé mon application j'ai eu une erreur à propos d'une des 2 chaînes de connexion ayant déjà été ajoutée à la liste des dictionnaires.
donc j'ai enlevé l'entrée conflictuelle, pensant bêtement qu'elle avait d'une façon ou d'une autre accès à la chaîne de connexion dans la propre application de l'Assemblée.config (il est tard!). Mais non, l'erreur se produisait en fait parce que les deux chaînes de connexion avaient aussi le même nom - une toute minuscule et une dans le boîtier Pascal - c'est-à-dire que la clé du dictionnaire ignore le boîtier. Donc quand J'ai enlevé le MySQL one, il a ensuite essayé d'utiliser la chaîne de connexion MSSQL pour les deux modèles. Donc, j'ai dû ré-ajouter, renommer et définir manuellement la chaîne de connexion pour le second modèle dans le code.