Provedor MySQL dados - Incapaz de objeto fundido do tipo 'System.Byte []' para tipo 'System.IConvertible'

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

Pergunta

Eu estou tendo alguma dificuldade com meu contexto Entity Framework que está provando muito problemático para depurar. Eu adicionou um recurso ao meu pedido ontem que deu um dos meus entidades uma colecção de entidades filho (chamado Models) e depois de atualizar uma das minhas expressões para Incluir () que a coleta quando eu consulta para o objeto pai, minha consulta está falhando com um InvalidCastException quando outro uma das coleções que funcionou bem antes é Incluir () '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);

Eu brincava com a expressão e removido diferentes coleções / alterados os include () 'd crianças e descobriu que é esta combinação exata de itens que faz com que a exceção mencionada. Se eu remover qualquer daqueles Inclui () não há nenhuma exceção, mas com aquelas três crianças, há um cada vez que eu tente puxar um única produto que tem um ou mais entidade na coleção Colors. A exceção não é lançada se eu remover o FirstOrDefault (p => p.ID == id) ou se a coleção Colors está vazio.

Parece que a adição da coleção Models foi o ponto de ruptura para a minha consulta, mas estou realmente não sei porquê.

A fonte exata da exceção é Mysql.Data eo stacktrace lê-se:

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)

Entidade Definições (campos relevantes apenas)

produtos

  • int ID
  • EntityCollection<ProductColorOption> Cores
  • EntityCollection<ProductImage> Images
  • EntityCollection<ProductModel> Models

ProductColor

  • int ID

ProductColorOption

  • int ID
  • int ProductID
  • int ProductColorID

ProductModel

  • int ID
  • int ProductID

productImage

  • int ID
  • int ProductID
  • sbyte? Ordem

Relações

  • Product.ID FK ProductImage.ProductID (um para muitos)
  • Product.ID FK ProductColorOption.ProductID (um para muitos)
  • Product.ID FK ProductModel.ProductID (um para muitos)
  • ProductColor.ID FK ProductColorOption.ProductColorID (um para muitos)

Obrigado a todos!


Atualizar

A sugestão de gaustin abaixo problema correções (não mais exceção), mas não realmente direcionar o problema real. Por essa razão eu vou deixar a questão 'sem resposta'.

Update 2

Eu percebo agora que pertence o bug não Entity Framework, mas sim ao Provedor MySQL dados. Por alguma razão, está tratando ProductColor.ID como um byte [] e, em seguida, tentando lançá-lo cegamente para um int. Este não é um problema Entity Framework em tudo. Vos maldizem Sun Microsystems ORACLE.

Foi útil?

Solução

Você já tentou carregamento lento o inclui?

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

// ... and so on

Isso pode ser informativo.

Isso também parece ser um conhecido questão . Eu não tenho certeza se há uma resolução conhecida no momento. Se houver Eu não posso encontrá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top