La Liste type d'entité`1 ne fait pas partie du modèle dans le contexte actuel
J'ai été en utilisant la Base de données tout d'Abord, EF 4.1
Je suis "La Liste type d'entité`1 ne fait pas partie du modèle dans le contexte actuel." erreur lors de la tentative de mise à jour d'un enregistrement de Modifier mon point de Vue.
L'erreur se produit à
db.Entry(properties).State = EntityState.Modified;
Voici mon Modèle:
public class Users
{
[Key]
public int User_ID { get; set; }
public string UserName { get; set; }
[NotMapped]
public IEnumerable<App_Properties> User_Properties
{
get { return Properties.Where(u => u.User_ID == User_ID); }
}
public virtual ICollection<App_Properties> Properties { get; set; }
}
public class App_Properties
{
[Key]
public int Prop_ID { get; set; }
public int User_ID { get; set; }
public int App_ID { get; set; }
public string Key { get; set; }
public string Value { get; set; }
public DateTime DateEntered { get; set; }
public DateTime DateModified { get; set; }
[ForeignKey("User_ID")]
public virtual Users Users { get; set; }
}
Voici mon Controller:
[HttpPost]
public ActionResult Edit(ICollection<App_Properties> properties)
{
if (ModelState.IsValid)
{
foreach (var item in properties)
{
db.Entry(properties).State = EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(properties);
}
Je soupçonne la boucle foreach n'est pas appropriée dans le réglage de la EntityState pour chaque élément dans une ICollection.
Toute aide serait grandement appréciée.
- Un rapide sémantique remarque, le nom App_Properties.Les utilisateurs impliquerait plusieurs utilisateurs, pas un seul. Convention tend à être qu'un objet a un nom singulier que de dire
var users = new Users()
implique un ensemble de personnes, pas un seul élément. - Oui, merci... je n'ai aucun contrôle de la bd et j'ai laissé le mauvais nommage des tables se propager vers le bas dans mon code.
- La db les noms n'ont pas bien - il est très facile de changer le mapping de votre POCO de la base de données de la table OnModelCreating:
modelBuilder.Entity<User>().ToTable("Users")
. Un simple F2 renommer sur les Utilisateurs de la classe se propager ensuite le renommer l'ensemble de votre projet. Même avec les noms de propriétés - vous pouvez personnaliser la carte de tout ça. weblogs.asp.net/scottgu/archive/2010/07/23/...
Vous devez vous connecter pour publier un commentaire.
Essayez de changer votre boucle:
Appeler
db.Entry(properties)
, de sorte que vous essayez de joindre l'ensemble de la collection à la fois. DbContext.Entrée(objet) attend un objet unique, n'est pas une collection.Grâce, Clémence, pour la réponse. A très bien fonctionné.
Pour ce que ça vaut, je préfère garder mon
EntityState.Modified
affectations sur une seule ligne (comme je l'ai multiples) donc utilisé les suivantes LINQ:Je me suis retrouvé ici, malgré l'aide de code-première EF. La réponse au problème pour moi était tout simplement de ne pas essayer de passer une liste des entités à la méthode d'insertion, mais de les insérer une à une à la place:
entityList.ForEach(context.Insert);
je pense que vous pouvez utiliser ce code pour ce problème. Parce que si vous l'utilisez, vous aurez rencontré un autre problème. Maintenant j'ai résolu mon problème et j'espère qu'il va travailler pour vous