Pas de mapping existe de l'objet type de Système.Les Collections.Génériques.Liste lors de l'exécution de la procédure stockée avec des paramètres en EF 4.3
Dernièrement, j'ai travaillé sur la procédure stockée et rencontré 1 problème étrange.
Tout d'abord, j'ai été en mesure de réussir un appel à une procédure stockée dans la base de données via:
IList<XXXViewModel> XXXList =
_context.La base de données.SqlQuery("spXXX").ToList();
Mais quand j'ai eu besoin de passer des paramètres qu'il a échoué:
var parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("param1", param1Value));
parameters.Add(new SqlParameter("param2", param2Value));
IList<XXXViewModel> XXXList =
_context.Database.SqlQuery<XXXViewModel>("spXXX @param1, @param2", parameters).ToList();
Et j'ai eu la ff, erreur:
Pas de mapping existe de type de l'objet
Système.Les Collections.Génériques.Liste`1[[Système.Les données.SqlClient.SqlParameter,
Système.De données, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089]] à un fournisseur géré en natif
type.
Noter que j'ai également essayé:
_context.Database.ExecuteSqlCommand<EXEC XXXViewModel>("spXXX @param1, @param2", parameters).ToList();
Mais il a obtenu le même résultat :-(.
Aussi j'ai essayé d'appeler, en spécifiant chacun des paramètres:
IList<XXXResult> query = Context.Database.SqlQuery<XXXResult>("SP @paramA, @paramB, @paramC", new SqlParameter("paramA", "A"), new SqlParameter("paramB", "B"), new SqlParameter("paramC", "C")).ToList();
Quelqu'un a une idée?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de passer chaque paramètre de la méthode (c'est à dire Vous ne pouvez pas passer d'une liste)
Dans le cas où quelqu'un d'autre vient à travers cette...
J'ai créé les paramètres de la Liste, puis dans la SqlQuery appel que j'ai passé avec un .ToArray(). A travaillé pour moi. Voici le code modifié ci-dessous...
La solution pour ce problème (dans mon cas a)
Où la requête a été une chaîne qui avait paramètres insérés tels que @Nom etc.
Les parms variable a une Liste de SQLParameters. SQL n'aime pas les génériques, listes....
SQL doit avoir un tableau de SQLParameters envoyé comme et object[] et non pas une liste de type générique.
Dans mon cas, le paramètre de
SQL type
et la manipulation des valeurs null de résoudre ce problème. Il jetait même exceptionNo mapping exists from object type System.RuntimeType to a known managed provider native type.
pour cehttp://karim-medany.blogspot.ae/2014/02/no-mapping-exists-from-object-type.html
n'a pas d'état de version de SQL Server, mais Erland Sommarskog a un article sur comment utiliser les Paramètres de la Table dans SQL Server et .NET.
http://www.sommarskog.se/arrays-in-sql-2008.html
En mesure de passer un nombre variable d'arguments à partir d'un client à l'aide d'un seul paramètre.
Si la procédure stockée est uniquement pour la mise à jour/insertion, les éléments suivants peuvent être utilisés en tant que bien.
Vous pouvez également utiliser des chaînes de caractères.Format de passer des paramètres à une procédure stockée
String.Format("")
, pour rendre sql phrases, les Paramètres d'utilisation des méthodes à la place! 😀