MySQL Data Provider - Kann nicht das Objekt von Typ ‚System.Byte []‘ ‚System.IConvertible‘ eingeben
-
05-07-2019 - |
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.
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.