Estoy utilizando Entity Framework (v4.0) para conectarme a SQL Azure (tengo el SDK de marzo instalado) y obtengo un InvalidOperationException
al intentar consultar una tabla. El mensaje de la excepción es Invalid attempt to read when no data is present.
y el seguimiento de la pila muestra claramente que este está fallando internamente en EF cuando se intenta obtener la cabecera de la columna:Entity Framework "Intento no válido de lectura cuando no hay datos" con datos 'grandes' en Azure
at System.Data.SqlClient.SqlDataReader.ReadColumnHeader(Int32 i)
at System.Data.SqlClient.SqlDataReader.IsDBNull(Int32 i)
at lambda_method(Closure , Shaper)
at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper)
at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Service.LoadSettings() in C:\Service.svc.cs
at SyncInvokeLoadSettings(Object , Object[] , Object[])
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
Esto está específicamente relacionado con los datos de una columna en la segunda tabla (Configuraciones en el ejemplo a continuación). Esto funciona perfectamente bien si consulto otra tabla (como los Usuarios en el siguiente ejemplo) o excluyo la búsqueda de esa columna. Ejemplo de código:
using (var db = new DBEntities())
{
var users = (from u in db.Users
where u.PK == userid
select u).ToList();
if (users.Any())
{
var selectedUser = users.Single();
if (selectedUser.Password.Equals(passwordHash))
{
// ******************************
// * error is on the next line! *
// ******************************
var settings = (from s in db.Settings
where s.User == selectedUser.PK
select s).ToList();
}
}
}
He intentado volver a crear las tablas, el cambio de nombres de tablas, nombres de columnas y tipos de datos y ninguna de ayuda. Si la tabla está vacía o la columna contiene un conjunto 'pequeño' de datos, entonces funciona, pero en el momento en que tengo una sola fila con datos 'grandes', ¡falla!
¿Qué quiero decir por pequeña & grande, así que en realidad no Smal & grande para SQL:
- 'pequeño' < ~ 8k
- 'grande'> ~ 8k
Puedo confirmar que el problema no está relacionado con mí disposing the context temprano.
Actualizaciones
- Este es sólo de lectura, inserciones funcionan bien.
- Esto no ocurre cuando uso LINQ to SQL, solo con EF.
- Bug logged with Microsoft ya que sospecho que esto no es un comportamiento normal.
obtengo un error similar. alguna solución a esto? –