Ne contient pas une définition pour “Ajouter”
Je suis en train de faire la même chose comme dans cette thread, mais j'obtiens une erreur:
'Système.Les Collections.Génériques.IEnumerable' ne contient pas une définition pour 'Ajouter' et aucune méthode d'extension 'Ajouter' acceptant un premier argument de type 'System.Les Collections.Génériques.IEnumerable' a pu être trouvé (vous manque une directive using ou une référence d'assembly?)
Voici mon code:
[HttpPost]
public ActionResult Create(ANIME anime)
{
var db = new MainDatabaseEntities();
var newanime = new ANIME
{
ID_AN = anime.ID_AN,
TITLE_OR = anime.TITLE_OR,
TITLE_EN = anime.TITLE_EN,
GENRES = new List<GENRES>()
};
foreach (var selectedAnime in anime.GENRES.Where(c => c.isSelected))
{
var genre = new GENRES { ID_GE = selectedAnime.ID_GE };
db.GENRES.Attach(genre);
newanime.GENRES.Add(genre); <--- this is the error line
}
db.ANIME.Add(newanime);
db.SaveChanges();
return RedirectToAction("Index");
}
ANIME:
public partial class ANIME
{
public int ID_AN { get; set; }
public string TITLE_OR { get; set; }
public string TITLE_EN { get; set; }
public virtual IEnumerable<GENRES> GENRES { get; set; }
}
GENRES:
public partial class GENRES
{
public int ID_GE { get; set; }
public string GENRE { get; set; }
public bool isSelected { get; set; }
public virtual ICollection<ANIME> ANIME { get; set; }
}
L'erreur est dans la ligne de newanime.GENRES.Add(genre)
dans HttpPost
. J'ai ajouté using System.Linq
à tous les modèles et les contrôleurs, mais il n'aide pas. Toutes les idées sur la façon de résoudre ce problème?
EDIT:
Après la réparation de ce un nouveau message d'erreur est arrivée. Je pense qu'il n'est pas lié à ci-dessus mais je ne veux pas de spam inutile de threads.
Message d'erreur:
L'entité ou de complexes de type 'MainDatabaseModel.Les GENRES ne peuvent pas être construits en une requête LINQ to entities.
Liées code:
public ActionResult Create()
{
var db = new MainDatabaseEntities();
var viewModel = new ANIME
{
GENRES = db.GENRES.Select(c => new GENRES
{
ID_GE = c.ID_GE,
GENRE = c.GENRE,
isSelected = false
}).ToList()
};
return View(viewModel);
}
- ce post expliquer un peu plus votre question stackoverflow.com/questions/1210295/...
- il n'y a pas de
.Add
méthode dansLinq
soit;IEnumerable
s ne peut pas être modifié. - La question que vous vous lien utilise la
IEnumerable
pour un modèle de vue. Vous êtes à l'aide de votre Entité Cadre entités comme les modèles de vue (à propos de laquelle je vous ai averti sur une question précédente), vous ne pouvez pas appliquer cette logique que les modèles besoinICollection
pour les propriétés de navigation sont un-à-plusieurs relations. Il suffit de changerIEnumerable<T>
àICollection<T>
. - Si je peux demander, pourquoi l'étrange conventions de nommage sur vos propriétés/classes? En C#, nous utilisons Pascal Cas pour les propriétés, les méthodes et les types, et nous utilisons camelCase pour les champs (qui ne sont généralement pas exposés)
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
ToList()
?field = db.Type.Select(dbType => new fieldType() { ... }).ToList()
fonctionnent très bien. EDIT: oups! non cela ne fonctionnera pas dans linq-to-sql, seulement dans linq-to-objets.Vous avez un IEnumerable de la propriété que vous êtes à l'initialisation de la Liste. La Liste de la classe implémente l'interface IEnumerable.
Lorsque vous êtes en invoquant quelque chose comme ceci:
vous dites que vous voulez pour votre objet, les caractéristiques de la
IEnumerable
de l'interface qui sont également hérité de laList
classe. Dans ce cas, la méthodeAdd
n'est pas une partie de l'interface IEnumerable, parce que c'est une méthode de la classe Liste, et vous avez cette exception.Vous avez alors de changer le type de votre propriété, de
IEnumerable<YourType>
àIList<YourType>
(plus d'infos sur IList ici). De cette façon, à l'exception desAdd
méthode ne sera pas levée.La réponse à votre deuxième question, c'est que vous ne pouvez pas (et ne devrait pas être capable de) projet sur le mapping de l'entité. Vous pouvez, cependant, un projet sur une annonymous type ou sur l'objet de transfert de données.
Voir ce fil:
L'entité ne peut pas être construits en une requête LINQ to entities
Aussi, s'il vous plaît ne pas prolonger votre question initiale avec un tout nouveau, unrealted dans le futur. C'est difficile à suivre...
IEnumerable<>
est juste une séquence d'éléments. Vous ne pouvez pas ajouter des éléments et vous ne pouvez pas supprimer des éléments. Vous pouvez l'interroger.Si vous avez besoin d'ajouter des éléments, vous aurez besoin d'une collection de mise en œuvre au moins l'
ICollection<>
interface ouIList<>
interface.Bonne nouvelle est que vous pouvez utiliser
IEnumerable<>
il y a comme suitMais cela n'a que peu de possibilités. Vous ne serez pas en mesure d'ajouter de nouveaux éléments une fois que vous quittez le champ d'application et lâche une référence pour les locaux
list
variable.