Fournisseur de données MySQL - Impossible de convertir l'objet de type 'System.Byte []' en 'System.IConvertible'

StackOverflow https://stackoverflow.com/questions/1401310

Question

J'ai quelques difficultés avec le contexte de mon Entity Framework qui s'avère très difficile à déboguer. Hier, j'ai ajouté une fonctionnalité à mon application qui donnait à l'une de mes entités une collection supplémentaire d'entités enfants (appelées modèles). Après la mise à jour de l'une de mes expressions pour inclure cette collection lorsque j'interroge l'objet parent, ma requête échoue. une exception InvalidCastException quand une autre des collections qui fonctionnait bien auparavant est Include () 'd.

Unable to cast object of type 'System.Byte[]' to type 'System.IConvertible'
var b = DbEntities.Products.Include("Images").Include("Models").Include("Colors").FirstOrDefault(p => p.ID == id);

J'ai manipulé l’expression et enlevé différentes collections / modifié les enfants d’Inclus () et découvert que c’est cette combinaison exacte d’éléments qui est à l’origine de l’exception susmentionnée. Si je supprime l'un de ces includes (), il n'y a pas d'exception, mais avec ces trois enfants, il y en a un à chaque fois que j'essaie de tirer un single produit qui a une ou plusieurs entités de la Colors collection. L'exception n'est pas levée si je supprime le FirstOrDefault (p = & Gt; p.ID == id) ou si la Mysql.Data collection est vide.

Il semblerait que l'ajout de la collection de modèles ait été le point de rupture de ma requête, mais je ne sais vraiment pas pourquoi.

La source exacte de l'exception est int et le chemin de pile lit:

at MySql.Data.MySqlClient.MySqlDataReader.GetInt32(Int32 i)
at lambda_method(ExecutionScope , Shaper )
at System.Data.Common.Internal.Materialization.Coordinator.HasNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.RowNestedResultEnumerator.MoveNext()
at System.Data.Common.Internal.Materialization.Shaper`1.ObjectQueryNestedEnumerator.TryReadToNextElement()
at System.Data.Common.Internal.Materialization.Shaper`1.ObjectQueryNestedEnumerator.ReadElement()
at System.Data.Common.Internal.Materialization.Shaper`1.ObjectQueryNestedEnumerator.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)
at Data.ProductsRepository.GetProduct(Int32 id) in ProductsRepository.cs:line 65
at Web.Controllers.Areas.Admin.ProductsController.EditProduct(Int32 id) in ProductsController.cs:line 111
at lambda_method(ExecutionScope , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)

Définitions d'entités (champs pertinents uniquement)

Produit

  • EntityCollection<ProductColorOption> ID
  • EntityCollection<ProductImage> Couleurs
  • EntityCollection<ProductModel> images
  • sbyte? Modèles

ProductColor

  • FK ID

ProductColorOption

  • <=> ID
  • <=> ProductID
  • <=> ProductColorID

ProductModel

  • <=> ID
  • <=> ProductID

ProductImage

  • <=> ID
  • <=> ProductID
  • <=> Commande

Relations

  • Product.ID <=> ProductImage.ProductID (Un à plusieurs)
  • Product.ID <=> ProductColorOption.ProductID (Un à plusieurs)
  • Product.ID <=> ProductModel.ProductID (Un à plusieurs)
  • ProductColor.ID <=> ProductColorOption.ProductColorID (Un à plusieurs)

Merci à tous!

Mettre à jour

La suggestion ci-dessous de gaustin résout le problème (plus d'exception), mais ne cible pas vraiment le problème. Pour cette raison, je vais laisser la question «sans réponse».

Mise à jour 2

Je réalise maintenant que le bogue ne concerne pas Entity Framework, mais plutôt le fournisseur de données MySQL. Pour une raison quelconque, il traite ProductColor.ID comme un octet [] puis essaie de le projeter aveuglément sur un int. Ce n'est pas du tout un problème de Entity Framework. Vous maudissez Sun Microsystems ORACLE.

Était-ce utile?

La solution

Avez-vous essayé de charger paresseux le includes?

var product = DbEntities.Products.FirstOrDefault(p => p.Id == id);
product.Images.Load();

// ... and so on

Cela pourrait être informatif.

Cela semble également être un problème connu . Je ne sais pas s'il existe une résolution connue pour le moment. S'il y en a, je ne le trouve pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top