MySQL Data Provider - Kann nicht das Objekt von Typ ‚System.Byte []‘ ‚System.IConvertible‘ eingeben

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

Frage

Ich habe einige Schwierigkeiten mit meinem Entity Framework Kontext, sehr mühsam zu debuggen erweisen. Ich habe gestern eine Funktion, um meine Anwendung, die eine meiner Einheiten eine zusätzliche Sammlung von Kindern Einheiten gab (so genannten Modelle) und nach einem meines Ausdrücke zu aktualisieren, dass die Sammlung Include (), wenn ich für das übergeordnete Objekt abfragen, meine Frage ist andernfalls mit eine InvalidCastException, wenn ein anderer der Sammlungen, die fein gearbeitet ist; d 'include ().

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);

ich mit dem Ausdruck getüftelt und entfernt verschiedene Sammlungen / verändern die () gehören "Kinder d und entdecken es genau diese Kombination von Elementen, die die oben genannte Ausnahme verursacht. Wenn I entfernen Sie alle von denen Includes () gibt es keine Ausnahme, aber mit diesen drei Kindern gibt es eine jedes Mal, wenn ich versuche, ein einziges Produkt zu ziehen, die hat eine oder mehrere Einheit in der Colors Sammlung. Die Ausnahme wird nicht ausgelöst, wenn ich den FirstOrDefault (p => p.ID == id) oder wenn die Colors Sammlung ist leer zu entfernen.

Es scheint, dass die Zugabe der Models Sammlung die Bruchstelle für meine Frage war, aber ich bin wirklich nicht sicher, warum.

Die genaue Quelle der Ausnahme ist Mysql.Data und die Stacktrace lautet:

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)

Entity-Definitionen (relevante Felder nur)

Produkt

  • int ID
  • EntityCollection<ProductColorOption> Farben
  • EntityCollection<ProductImage> Images
  • EntityCollection<ProductModel> Modelle

ProductColor

  • int ID

ProductColorOption

  • int ID
  • int ProductID
  • int ProductColorID

Product

  • int ID
  • int ProductID

Produktbild

  • int ID
  • int ProductID
  • sbyte? Order

Beziehungen

  • Product.ID FK ProductImage.ProductID (One to Many)
  • Product.ID FK ProductColorOption.ProductID (One to Many)
  • Product.ID FK ProductModel.ProductID (One to Many)
  • ProductColor.ID FK ProductColorOption.ProductColorID (One to Many)

Danke allen!


Aktualisieren

gaustin Vorschlag unten behebt Problem (nicht mehr Ausnahme), ist aber nicht wirklich die eigentliche Frage zielen. Aus diesem Grunde werde ich die Frage ‚offen‘ verlassen.

Update 2

Ich weiß jetzt, dass der Fehler nicht zu Entity Framework bezieht, sondern auf die MySQL-Datenprovider. Aus irgendeinem Grunde ist die Behandlung es ProductColor.ID als byte [] und dann versuchen, es in einem int blind zu werfen. Dies ist kein Problem, Entity Framework überhaupt. Verfluchen Sie Sun Microsystems ORACLE.

War es hilfreich?

Lösung

Haben Sie verzögertes Laden versucht, das beinhaltet?

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

// ... and so on

Das könnte aufschlussreich sein.

Das sieht auch ein bekanntes Problem sein. Ich bin mir nicht sicher, ob es eine bekannte Auflösung im Moment ist. Wenn es ich kann es nicht finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top