System.InvalidOperationException в EntityFramework после завершения запроса с использованием действительного SQL

65
7

Я уже пару дней искал ответ на этот вопрос, и я полностью застрял. Я предполагаю, что я не ищу правильную вещь, так как я уверен, что решение прост, и это просто то, что я сделал неправильно.


Если об этом ответили раньше, просто свяжите меня с нитью.


По какой-то причине, когда я пытаюсь получить данные из базы данных с помощью Entity Framework, как этот код ниже, ничего не происходит. Когда я прошел через код, я обнаружил, что он добирается до строки, которая получает данные из базы данных, а затем просто выпрыгивает из функции, никаких ошибок, ничего, приложение просто продолжает работать, но я не получаю свой данных.


private void CreateKitWindow_Loaded(object sender, RoutedEventArgs e)
{
string kitID = "";
using (MyContext foo = new MyContext())
{
foo.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
LaminationKit theKit = foo.Lamination_Kit.OrderByDescending(x => x.KitNumber).First();
kitID = theKit.KitNumber;
}
kitNumber.Content = kitID;
}

я узнал о строке журнала базы данных здесь, на SO, и добавил ее и проверил результаты.


Opened connection at 2/12/2015 2:26:22 p.m. +13:00

SELECT TOP (1)
[Extent1].[UID] AS [UID],
[Extent1].[KitNumber] AS [KitNumber],
[Extent1].[dateCreated] AS [dateCreated],
[Extent1].[lastTransaction] AS [lastTransaction],
[Extent1].[daysLeft] AS [daysLeft],
[Extent1].[hoursLeft] AS [hoursLeft],
[Extent1].[minsLeft] AS [minsLeft],
[Extent1].[jobNo] AS [jobNo],
[Extent1].[assemblyNo] AS [assemblyNo],
[Extent1].[storageLocation] AS [storageLocation],
[Extent1].[jobName] AS [jobName],
[Extent1].[jobDescription] AS [jobDescription],
[Extent1].[mouldNumber] AS [mouldNumber],
[Extent1].[targetJob] AS [targetJob],
[Extent1].[targetAssembly] AS [targetAssembly],
[Extent1].[targetLine] AS [targetLine],
[Extent1].[dateFrozen] AS [dateFrozen],
[Extent1].[dateThawed] AS [dateThawed],
[Extent1].[cookDate] AS [cookDate]
FROM [dbo].[LaminationKit] AS [Extent1]
ORDER BY [Extent1].[KitNumber] DESC

-- Executing at 2/12/2015 2:26:22 p.m. +13:00

-- Completed in 5 ms with result: SqlDataReader

Exception thrown: 'System.InvalidOperationException' in EntityFramework.dll
Closed connection at 2/12/2015 2:26:22 p.m. +13:00


Может ли кто-нибудь сказать мне, что здесь происходит? Запрос действителен и в соответствии с этим успешно завершен, но затем генерирует исключение.
Я вставил этот точный запрос в студию управления SQL-сервером, и он отлично работает и делает именно то, что я хочу.


Вот контекст, если это помогает (лишний материал удален)


class MyContext : DbContext
{
public MyContext() : base("Password=xxxxxxx;Persist Security Info=True;User ID=xxxxxxxx;Data Source=ssnzsql02;Packet Size=4096;Initial Catalog=SS_Outlife_E10")
{
}

public DbSet<LaminationKit> Lamination_Kit { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

}


Другое дело, что я могу получить данные, используя более длинный


var foo = from item in context.table
where item.this == something
Orderby item.that
select item

foreach(var t in foo)
{
//loop through and do stuff
}


просто отлично, но я не хочу этого делать в каждом случае.
Проблема связана не только с этой таблицей, но и с множеством разных таблиц в базе данных.


Спасибо за помощь за помощь:)

спросил(а) 2015-12-02T05:04:00+03:00 4 года назад
1
Решение
47

Спасибо cFrozenDeath и FizzBuzz, я не знаю, почему я не думал попробовать это в первую очередь. (возможно, из-за того, что во время выполнения не происходило никакого сбоя или перерыва)


Я бросил try/catch вокруг него, чтобы посмотреть, не поймает ли он его, и я получаю это сообщение


The 'dateFrozen' property on 'LaminationKit' could not be set to a 'null' value. You must set this property to a non-null value of type 'System.DateTime'.

Так получается, что был супер простым и я просто дергался, мне нужно убедиться, что я установил свои типы данных в значение NULL для полей таблицы, которые допускают нулевые значения #EpicFacepalm

изменения


public DateTime dateFrozen { get; set; }
to
public Nullable<DateTime> dateFrozen { get; set; }

решил.


Теперь, чтобы пройти все и исправить все остальные.

ответил(а) 2015-12-02T05:42:00+03:00 4 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема