C# 查询使用有效SQL完成后EntityFramework中的System.InvalidOperationException

C# 查询使用有效SQL完成后EntityFramework中的System.InvalidOperationException,c#,entity-framework,C#,Entity Framework,这几天我一直在寻找答案,我完全被卡住了。我假设这只是我没有寻找正确的事情,因为我确信解决方案很简单,只是我做错了 出于某种原因,当我尝试使用下面的代码这样的实体框架从数据库中获取数据时,什么也没有发生。当我遍历代码时,我发现它正在到达从数据库获取数据的行,然后跳出函数,没有错误,什么都没有,应用程序只是继续运行,但我没有获取数据 private void CreateKitWindow_Loaded(object sender, RoutedEventArgs e) { string k

这几天我一直在寻找答案,我完全被卡住了。我假设这只是我没有寻找正确的事情,因为我确信解决方案很简单,只是我做错了

出于某种原因,当我尝试使用下面的代码这样的实体框架从数据库中获取数据时,什么也没有发生。当我遍历代码时,我发现它正在到达从数据库获取数据的行,然后跳出函数,没有错误,什么都没有,应用程序只是继续运行,但我没有获取数据

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;
}
我在Stack Overflow上发现了数据库日志行,添加了它并检查了结果

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
有人能告诉我这里发生了什么事吗?该查询是有效的,并根据该查询成功完成,但随后引发异常。 我将这个精确的查询粘贴到SQLServerManagementStudio中,它运行良好,完全符合我的要求

这里是上下文,如果有帮助的话(额外的东西被移除)

方法很好,但我不想在任何情况下都这样做。
这个问题不仅仅发生在这个表上,它发生在数据库中的许多不同的表上。

谢谢cfrozendath和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'.
结果是非常简单,我刚刚修改了,我需要确保为允许空值的表字段将数据类型设置为可空

改变

public DateTime dateFrozen { get; set; }
to
public Nullable<DateTime> dateFrozen { get; set; }
public DateTime datefreezed{get;set;}
到
公共可为空的日期冻结{get;set;}
解决了


现在,我们来检查所有内容并修复所有其他内容。

如果您研究异常,它是否有InnerException?这可能会提供有关错误的更多详细信息。可能会将整个InvalidOperationException详细信息发布到某个地方,并链接到此处。如上所述。至少应该有一些对行号和/或方法的引用…它可以是对
kitID
字段或
kitNumber.Content
的赋值,或者完全是其他内容。目前很难说。Stacktrace将非常有用。请尽可能多地提供有关错误的信息。很高兴您能解决此问题。有时候我们会错过最明显的事情。是的,有时候很傻,你会在最简单的错误上坚持多久。
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'.
public DateTime dateFrozen { get; set; }
to
public Nullable<DateTime> dateFrozen { get; set; }