Я использую 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)
Это конкретно относится к данным в столбце во второй таблице (Настройки в примере ниже). Это прекрасно работает, если я запрашиваю другую таблицу (например, Пользователи в примере ниже) или исключаю запрос этого столбца.
Пример кода:
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();
}
}
}
Я пытался воссоздать таблицы, изменить имена таблиц, имена столбцов и типы данных, и ничего из этого не помогло. Если таблица пуста или столбец содержит «небольшой» набор данных, он работает, но в тот момент, когда в нем есть одна строка с «большими» данными, происходит сбой!
Что я имею в виду под маленькими и большими, ну, они не совсем маленькие и большие для SQL:
- «маленький» <~ 8k </li>
- «большой»> ~ 8k
Я могу подтвердить, что проблема не связана со мной удаление контекста на ранней стадии.
<ч />
Обновление
- Это только для чтения, вставки работают нормально.
- Это не происходит, когда я использую LINQ to SQL, только с EF.
- Ошибка, зарегистрированная в Microsoft , так как я подозреваю, что это ненормальное поведение.