Le type d'entité <type> ne fait pas partie du modèle dans le contexte actuel
Je suis arriver dans le Cadre de l'Entité, mais je ne suis pas sûr si je suis absent un point critique dans le code-première approche.
Je suis à l'aide d'un générique modèle de référentiel basé sur le code de https://genericunitofworkandrepositories.codeplex.com/ et ont créé de mes entités.
Mais lorsque j'essaie d'accéder ou de modifier l'entité je croise les suivantes:
Système.InvalidOperationException: Le type d'entité que l'Immobilier n'est pas de la partie
de modèle pour le contexte actuel.
Il se passe lorsque j'essaie d'accéder à partir de mon référentiel:
public virtual void Insert(TEntity entity)
{
((IObjectState)entity).ObjectState = ObjectState.Added;
_dbSet.Attach(entity); //<-- The error occurs here
_context.SyncObjectState(entity);
}
La base de données (./SQLEXPRESS) est créé seulement beaux, mais les entités (tables) est tout simplement pas créé au démarrage.
Je me demande si j'ai besoin explicite de l'ensemble de la cartographie des entités? Est EF pas capable de ce par son propre?
Mon Entité est:
public class Estate : EntityBase
{
public int EstateId { get; set; }
public string Name { get; set; }
}
Mon contexte est donc:
public partial class DimensionWebDbContext : DbContextBase //DbContextBase inherits DbContext
{
public DimensionWebDbContext() :
base("DimensionWebContext")
{
Database.SetInitializer<DimensionWebDbContext>(new CreateDatabaseIfNotExists<DimensionWebDbContext>());
Configuration.ProxyCreationEnabled = false;
}
public new IDbSet<T> Set<T>() where T : class
{
return base.Set<T>();
}
}
Est-il une raison particulière pourquoi cette erreur se produit? J'ai essayé d'activer des migrations et de permettre les migrations automatiques sans aucune aide.
Vous devez vous connecter pour publier un commentaire.
Mettre ceci dans votre personnalisé
DbContext
classe:Si vos tables ne sont pas créés au démarrage, c'est pourquoi. Vous devez dire à la DbContext parler d'eux dans la OnModelCreating méthode de remplacement.
Vous pouvez soit le faire personnalisé par entité mappages d'ici, ou de les séparer en plusieurs
EntityTypeConfiguration<T>
classes.OnModelCreating
si votre entités sont dans la même assemblée que votreDbContext
. Je n'ai jamais utilisé les données des annotations pour les entités, donc je ne peux pas dire à coup sûr. Vous avez toujours la possibilité de numérisation assemblées dans votreOnModelCreating
de trouver des entités dans d'autres assemblées et les enregistrer automatiquement (c'est ce Trépied n').Apparemment, cette erreur est très générique, il pourrait avoir un certain nombre de raisons. Dans mon cas, il a été le suivant: La chaîne de connexion (sur le Web.config) générés par les
.edmx
était pas valide. Après presque une journée de tout essayé, j'ai changé la chaîne de connexion de l'EF chaîne à un ADO.NET chaîne de caractères. Cela a résolu mon problème.Par exemple, l'EF chaîne ressemble à quelque chose comme ceci:
Et la ADO.NET chaîne ressemble à ceci:
Source: http://msdn.microsoft.com/nl-nl/data/jj556606.aspx
EF 4.x
àEF 6
. J'ai eu à régénérer la chaîne de connexion pour ajouter une table (DatabaseFirst
). Je n'avais pas remarqué que mon connectionstring dans leapp.config
et laweb.config
étaient différents. Une fois que j'ai pris au cours de laconnectionstring
de laapp.config
, il a commencé à travailler.Pour moi, le problème était que je n'avais pas compris la Classe d'Entité au sein de ma db défini dans le contexte d'entity framework.
Le problème peut être dans la chaîne de connexion. Assurer votre chaîne de connexion est pour SqlClient fournisseur, sans métadonnées des trucs liés à EntityFramework.
Vous pouvez essayez de supprimer la table à partir du modèle et l'ajouter à nouveau. Vous pouvez le faire visuellement par l'ouverture de l' .fichier edmx à partir de l'Explorateur de solutions.
Suit:
J'ai vu cette erreur lors d'une table existante dans la base de données n'est pas correctement la carte à un premier code de modèle. Plus précisément, j'ai eu un char(1) dans la table de base de données et un char en C#. Changer le modèle d'une chaîne de résoudre le problème.
Mon problème a été résolu par la mise à jour de la partie de métadonnées de la chaîne de connexion. Apparemment, il pointait le mal .csdl /.lsed /.msl référence.
Une autre chose à vérifier auprès de votre chaîne de connexion, le nom du modèle. J'ai été en utilisant deux modèles d'entité, DB première. Dans la config, j'ai copié l'entité de connexion pour l'un, renommé, et changé la chaîne de connexion de la partie. Ce que je n'ai pas le changement a été le nom du modèle, ainsi, alors que le modèle d'entité générée correctement, lorsque le contexte a été lancé EF était à la recherche dans le mauvais modèle pour les entités.
Semble évidente écrit, mais il y a quatre heures, je ne vais pas revenir en arrière.
Pour moi le problème est que j'ai utilisé le
connection string
généré parADO.Net
Modèle (.edmx). Modifiez la chaîne de connexion résolu mon problème.Cela peut également se produire si vous utilisez un persisté modèle de cache qui est de la date, pour une raison ou une autre. Si votre contexte a été mis en cache dans un fichier EDMX sur un système de fichiers (via DbConfiguration.SetModelStore) puis OnModelCreating ne sera jamais appelé comme la version mise en cache sera utilisé. En conséquence, si une entité est absent de votre cache magasin, vous obtenez l'erreur ci-dessus, même si la chaîne de connexion est correcte, l'existence de la table dans la base de données et l'entité est correctement configuré dans votre DbContext.
Semble évident, mais assurez-vous que vous n'êtes pas explicitement en ignorant le type:
modelBuilder.Ignore<MyType>();
carte de l'entité (même vide) est ajouté à la configuration qui conduira à avoir le type d'entité faire partie du contexte. Nous avions une entité sans lien avec d'autres entités qui avait été fixé avec une carte vide.
si vous essayez DB d'abord, puis assurez-vous que votre table a clé primaire
Visual Studio 2019 semble faire cela pour moi. Je l'ai fixée par génération du modèle edmx à nouveau en 2017.
Le message était assez clair, mais je n'ai pas l'obtenir au premier abord...
Je travaille avec deux Entity Framework DB contextes
sysContext
etshardContext
dans la même méthode.L'entité que j'avais modifié\mise à jour est d'un contexte, mais ensuite, j'ai essayé de l'enregistrer à l'autre contexte comme celui-ci:
mais la version correcte devrait être:
Après le passage de l'entité pour le bon contexte cette erreur a disparu.