J'entre dans Entity Framework, mais je ne sais pas si je manque un point critique dans l'approche code-first.
J'utilise un modèle de référentiel générique basé sur le code de https://genericunitofworkandrepositories.codeplex.com/ et j'ai créé mes entités.
Mais lorsque j'essaye d'accéder ou de modifier l'entité, je rencontre ce qui suit:
System.InvalidOperationException: le type d'entité Estate ne fait pas partie du modèle pour le contexte actuel.
Cela se produit lorsque j'essaye d'y accéder depuis 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éée très bien, mais les entités (tables) ne sont tout simplement pas créées au démarrage.
Je me demande si j'ai besoin de définir explicitement le mappage des entités? EF n'est-il pas capable de le faire seul?
Mon entité est:
public class Estate : EntityBase
{
public int EstateId { get; set; }
public string Name { get; set; }
}
Mon contexte est le suivant:
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>();
}
}
Y a-t-il une raison spécifique pour laquelle cette erreur se produit? J'ai essayé d'activer les migrations et d'activer les migrations automatiques sans aucune aide non plus.
la source
OnModelCreating
si vos entités sont dans la même assemblée que la vôtreDbContext
. Cependant, je n'ai jamais utilisé d'annotations de données pour les entités, donc je ne peux pas le dire avec certitude. Vous pouvez toujours scanner les assemblages dans votreOnModelCreating
pour trouver des entités dans d'autres assemblages et les enregistrer automatiquement (ce que fait Tripod).Apparemment, cette erreur est très générique, elle pourrait avoir plusieurs raisons. Dans mon cas, c'était le suivant: La chaîne de connexion (dans Web.config) générée par le
.edmx
n'était pas valide. Après presque une journée à tout essayer, j'ai changé la chaîne de connexion de la chaîne EF à une chaîne ADO.NET. Cela a résolu mon problème.Par exemple, la chaîne EF ressemble à quelque chose comme ceci:
Et la chaîne ADO.NET ressemble à ceci:
Source: http://msdn.microsoft.com/nl-nl/data/jj556606.aspx
la source
EF 4.x
àEF 6
. J'ai dû régénérer la chaîne de connexion pour ajouter une table (DatabaseFirst
). Je n'ai pas remarqué que ma chaîne de connexion dans leapp.config
et leweb.config
étaient différents. Une fois que j'ai pris le relaisconnectionstring
duapp.config
, cela a commencé à fonctionner.Pour moi, le problème était que je n'avais pas inclus la classe d'entité dans mon ensemble de bases de données dans le contexte du cadre d'entité.
la source
Vous pouvez essayer de supprimer la table du modèle et de l'ajouter à nouveau. Vous pouvez le faire visuellement en ouvrant le fichier .edmx à partir de l'Explorateur de solutions.
Pas:
la source
Le problème peut être dans la chaîne de connexion. Assurez-vous que votre chaîne de connexion est destinée au fournisseur SqlClient, sans métadonnées liées à EntityFramework.
la source
J'ai vu cette erreur lorsqu'une table existante dans la base de données ne correspond pas correctement à un premier modèle de code. Plus précisément, j'avais un char (1) dans la table de la base de données et un char en C #. Le changement du modèle en chaîne a résolu le problème.
la source
Mon problème a été résolu en mettant à jour la partie métadonnées de la chaîne de connexion. Apparemment, il indiquait la mauvaise référence .csdl / .ssdl / .msl.
la source
Une autre chose à vérifier avec votre chaîne de connexion - le nom du modèle. J'utilisais deux modèles d'entité, DB d'abord. Dans la configuration, j'ai copié la connexion d'entité pour une, je l'ai renommée et j'ai changé la partie de la chaîne de connexion. Ce que je n'ai pas changé, c'est le nom du modèle, donc bien que le modèle d'entité soit généré correctement, lorsque le contexte a été lancé, EF recherchait dans le mauvais modèle les entités.
Cela semble évident, mais il y a quatre heures que je ne reviendrai pas.
la source
Pour moi, le problème était que j'utilisais le fichier
connection string
généré parADO.Net
Model (.edmx). La modification de la chaîne de connexion a résolu mon problème.la source
Cela peut également se produire si vous utilisez un cache de modèle persistant qui est obsolète 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), OnModelCreating ne sera jamais appelé car la version mise en cache sera utilisée. Par conséquent, si une entité est manquante dans votre magasin mis en cache, vous obtiendrez l'erreur ci-dessus même si la chaîne de connexion est correcte, la table existe dans la base de données et l'entité est correctement configurée dans votre DbContext.
la source
Le message était assez clair mais je ne l'ai pas compris au début ...
Je travaille avec deux contextes de base de données Entity Framework
sysContext
etshardContext
dans la même méthode.L'entité que j'avais modifiée \ mise à jour provient d'un contexte mais j'ai ensuite essayé de la sauvegarder dans l'autre contexte comme ceci:
mais la version correcte devrait être celle-ci:
Après avoir passé l'entité au bon contexte, cette erreur a disparu.
la source
Cela semble évident, mais assurez-vous de ne pas ignorer explicitement le type:
modelBuilder.Ignore<MyType>();
la source
la carte de l'entité (même vide) ajoutée à la configuration conduira à ce que le type d'entité fasse partie du contexte. Nous avions une entité sans relation avec d'autres entités qui a été fixée avec une carte vide.
la source
si vous essayez d'abord DB, assurez-vous que votre table a une clé primaire
la source
Visual Studio 2019 semble causer cela pour moi. Je l'ai corrigé en générant à nouveau le modèle edmx en 2017.
la source
J'ai le même problème dans Entity Framewrok et je l'ai résolu en suivant les étapes suivantes:
1-Ouvrez votre Model.edmx 2-changez un emplacement de table (pour faire le changement dans le fichier cs) 3-enregistrez-le
J'espère vous aider
la source
Supprimez le fichier .edmx et ajoutez-le à nouveau. Surtout, si vous avez mis à niveau Entity Framework.
la source
J'étais confronté au même problème avec EntityFrameworkCore essayant de mettre à jour une plage de valeurs.
Cette approche n'a pas fonctionné
Après avoir ajouté la méthode UpdateRange et supprimé l'attachement et l'entrée, tout fonctionne
la source
Pour moi, cela a été causé parce que j'ai renommé la classe d'entité. Quand je l'ai annulée, c'était OK.
la source
Cela pourrait être stupide, mais si vous ne rencontrez cette erreur que sur certaines tables, n'oubliez pas de nettoyer votre projet et de le reconstruire (cela pourrait vous faire gagner beaucoup de temps)
la source
J'avais ça
C'était dans une méthode async, mais j'ai oublié de mettre await avant GetEntryAsync, et j'ai donc eu cette même erreur ...
la source