Obtenir "Le type d'entité & lt; modèle & gt; ne fait pas partie du modèle pour le contexte actuel. "
Je vais avoir ce problème de mise à jour de ma base de données 1 colonne à la fois dans asp.net à l'aide de l'api web. Je suis en train d'interroger un METTRE pour mettre à jour une valeur dans la ligne au lieu de la mise à jour de l'un et de réglage de la reste à null. J'ai fait un modèle distinct, à l'extérieur de l'automate à prendre dans la mise à jour afin que je puisse faire à un moment. Lorsque je tape cette ligne db.Entry(user).State = EntityState.Modified;
dans le contrôleur, qui est l'endroit où il est erroring arrière. Des conseils comment je peux résoudre ce problème?
C'est mon séparé ViewModel je suis prise dans la méthode put:
namespace WebAPI.Models.ViewModels
{
public class UserViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
C'est mon contrôleur de l'appel de la méthode avec le ViewModel dans mes paramètre:
public HttpResponseMessage PutUser(int id, UserViewModel user)
{
HttpResponseMessage response;
if (db.User.IsInRole("Admin"))
{
try
{
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(id))
{
response = new HttpResponseMessage(HttpStatusCode.NotFound);
return response;
}
else
{
throw;
}
}
response = new HttpResponseMessage(HttpStatusCode.NoContent);
return response;
}
C'est mon DBContext
fichier:
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<User> Users { get; set; }
}
}
source d'informationauteur Shawn
Vous devez vous connecter pour publier un commentaire.
L'erreur vient de la façon dont vous initialiser le contexte de données
db
.L'utilisateur de l'objet a été créé dans un autre
db
de sorte que, lorsque vous essayez de mettre à jouruser
l'actuel db ne sais pas à propos de ceuser
objet.Vous pu le résoudre en incitant un utilisateur
Sinon, vous pouvez assurez-vous que le contexte de données que vous utilisez pour créer le
user
objet est le même que celui qui essaie de mettre à jour l'utilisateur.Cela fait-il sens pour vous?
Toujours ce qui s'est passé, si votre dépôt besoins dynamiques de l'accès à différentes Entity Framework DbContext qui signifie que les différentes bases de données.
Vérifier votre chaîne de connexion de données dans le web.fichier de configuration pour chaque Entité Frmework DbContext.
Par exemple:
vérifier les métadonnées dans connectionString s'il pointe vers un bon DbContext.
Dans cet exemple, il est pointé à demx fichier appelé "CRMEntities".
assurez-vous que vous avez la bonne partie de métadonnées doit être la même qu'en edmx
connectionString="metadata=res:///Model1.csdl|res:///Model1.lsed|res://*/Model1.msl;"
Mise à jour le modèle pour y inclure l'ID de la propriété.
Puis faire
var e = db.Entry(user);
e.Property(p => p.FirstName).Modified = true;
La ligne de propriété est la procédure pour spécifier les champs individuels.
Votre viewmodel est pas pleinement qualifié de l'Utilisateur de l'objet. En tant que tel, vous devez en obtenir un.
Cet appel,
db.User.IsInRole("Admin")
semble indiquer que l'utilisateur actuel déjà. Vous devez simplement modifier que l'une et de le soumettre ensuite que les changementsCe qui m'est arrivé parce que quelqu'un a créé une nouvelle chaîne de connexion dans l'application.config par couper-coller à partir d'un existant.
Le résultat ressemble à ceci:
Remarque comment Db2Context les références à la DbContext1 dans ses métadonnées...
Vérifier que le serveur est en 64 ou 32 bits et recompiler l'application.
J'ai été faire cette exception. Je l'ai résolu en cliquant Droit sur l'Entité.modèle edmx dans le diagramme et l'actualisation de la connexion à ma base de données via "mise à Jour du Modèle De Base de données".
Je ne sais pas pourquoi cela a fonctionné, mais il l'a fait, au moins dans mon cas.
J'ai eu le même problème de réception de l'exception lorsque j'ai essayé d'ajouter une instance de ma classe à la DbSet. Mon problème est que la définition de la table dans la base de données ne correspond pas à mes acutal objet (2 non-null propriétés manquaient dans mon modèle). J'ai ajouté les deux propriétés de ma classe et l'erreur a disparu.
J'ai eu le même problème.
Mon probleme a été, je ne mets pas toute la cartographie de l'Entité ou de la Table.
Après la cartographie de mon entité, le problème a été résolu.