MySQL Data Provider- 'System.Byte []'type 'system.iconvertible'의 객체를 캐스트 할 수 없습니다.

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

문제

디버그에 매우 번거로운 입증되는 엔티티 프레임 워크 컨텍스트에 약간의 어려움이 있습니다. 어제 내 응용 프로그램에 기능을 추가하여 내 엔티티 중 하나를 추가 하위 엔티티 (모델이라고 함)에 추가 한 후, 내 표현식 중 하나를 부모 객체에 대한 쿼리 할 때 해당 컬렉션을 포함하도록 표현식 중 하나를 업데이트 한 후 쿼리가 실패합니다. 이전에 잘 작동 한 컬렉션 중 하나가 다음과 같은 경우 InvalidcastException은 다음과 같습니다.

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

나는 표현을 피하고 다른 컬렉션을 제거/포함 () 'D'Children을 변경했으며 앞서 언급 한 예외를 일으키는 항목의 정확한 조합이라는 것을 발견했습니다. 내가 제거하면 어느 그 중에는 () 예외는 없지만, 그 세 자녀는 내가 잡아 당기려고 할 때마다 하나가 있습니다. 하나의 가지고있는 제품 하나 이상 엔티티의 엔티티 Colors 수집. FirstOrdefault (p => p.id == id)를 제거하거나 Colors 컬렉션이 비어 있습니다.

모델 컬렉션의 추가가 내 쿼리의 파괴 포인트 인 것 같습니다. 그러나 왜 그런지 잘 모르겠습니다.

예외의 정확한 출처는입니다 Mysql.Data 그리고 스택 트레이스는 다음과 같습니다.

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)

엔티티 정의 (관련 필드 만)

제품

  • int ID
  • EntityCollection<ProductColorOption> 그림 물감
  • EntityCollection<ProductImage> 이미지
  • EntityCollection<ProductModel> 모델

ProductColor

  • int ID

ProductColoroption

  • int ID
  • int 제품 ID
  • int ProductColorid

ProductModel

  • int ID
  • int 제품 ID

생성물

  • int ID
  • int 제품 ID
  • sbyte? 주문하다

관계

  • 제품 ID FK ProductImage.productid (하나에서 많은)
  • 제품 ID FK ProductColoroption.productid (하나에서 많은)
  • 제품 ID FK ProductModel.ProductID (하나에서 많은)
  • ProductColor.id FK ProductColoroption.ProductColorid (하나에서 많은)

감사합니다!


업데이트

아래의 Gaustin의 제안은 문제를 해결하지만 (예외는 예외는 없음) 실제로 실제 문제를 목표로하지는 않습니다. 그런 이유로 나는 '답이없는'질문을 남겨 둘 것입니다.

업데이트 2

이제 버그는 엔티티 프레임 워크가 아니라 MySQL 데이터 제공 업체와 관련이 있다는 것을 알고 있습니다. 어떤 이유로 든 곱 컬러를 바이트 []로 취급 한 다음 int에 맹목적으로 캐스팅하려고합니다. 이것은 전혀 엔티티 프레임 워크 문제가 아닙니다. 당신을 저주하십시오 태양 마이크로 시스템 신탁.

도움이 되었습니까?

해결책

포함 내용을 게으른로드 해 보셨습니까?

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

// ... and so on

그것은 유익 할 수 있습니다.

이것은 또한 알려진 문제. 현재 알려진 해상도가 있는지 확실하지 않습니다. 내가 찾을 수 없다면.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top