实体框架"无数据存在时读取的无效尝试"与Azure上的"大"数据

Rob*_*ean 7 .net entity-framework azure-sql-database

我正在使用Entity Framework(v4.0)连接到SQL Azure(我安装了March SDK),并InvalidOperationException在尝试查询表时获取.异常消息是Invalid attempt to read when no data is present.,并且堆栈跟踪清楚地显示,当它尝试获取列标题时,它在EF内部失败:

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)
Run Code Online (Sandbox Code Playgroud)

这特别与第二个表中的列中的数据有关(下例中的设置).如果我查询另一个表(如下面示例中的用户)或排除查询该列,则此工作完全正常.代码示例:

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(); 
        } 
    } 
}   
Run Code Online (Sandbox Code Playgroud)

我已经尝试重新创建表,更改表名,列名和数据类型,但没有任何帮助.如果表是空的或者列包含"小"数据集然后它可以工作,但是当我在其中有一行"大"数据时它会失败!

对于小型和大型,我的意思是什么,它们对于SQL来说并不是非常小和大:

  • '小'<~8k
  • '大'> ~8k

我可以确认这个问题与我早期处理上下文无关.


更新

  1. 这只是在读取,插入工作正常.
  2. 当我使用LINQ to SQL时,只有EF才会出现这种情况.
  3. 使用Microsoft记录的错误,因为我怀疑这不是正常行为.

小智 1

增加上下文的 CommandTimeout。